gpt4 book ai didi

objective-c - 我应该为异步方法使用什么签名?

转载 作者:行者123 更新时间:2023-12-03 16:54:50 25 4
gpt4 key购买 nike

有时 Cocoa 允许用户将 NSOperationQueue 或 dispath_queue_t 传递给异步方法:

+[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]
-[AVPlayer addBoundaryTimeObserverForTimes:queue:usingBlock:]
-[NSNotificationCenter addObserverForName:object:queue:usingBlock:]

有时不会:

-[NSDocument continueActivityUsingBlock:]
-[NSSavePanel beginWithCompletionHandler:]
-[GKAchievementDescription loadImageWithCompletionHandler:]

对我来说,将队列传递给该方法看起来不明确,因为在创建 block 时您始终可以捕获所需的队列。例如:

NSOperationQueue *q = …;
[aDocument continueActivityUsingBlock:^{
[q addOperationWithBlock:^{
// Do actual work here.
}];
}];

也许我错过了一些东西并且传递队列有意义?

最佳答案

视情况而定。

完成后需要回调吗?

如果是这样,您可能需要指定一个队列。类型——NSOperationQueue 与 GCD 队列——由你决定。

但是,如果您将回调定义为始终在主队列上调用(这对于始终将广泛更新 UI 的回调来说是合适的) )或者总是将被异步调用(即回调通常被分派(dispatch)到异步队列上),没有理由传递目标队列。

如果您的回调预期可能会与必须序列化操作的数据进行交互,那么定义一个提供序列化原语(队列)的 API 可能是一种强大的快捷方式。

关于objective-c - 我应该为异步方法使用什么签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13106426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com