我有一个接受 block 和完成 block 的方法。第一个 block 应该在后台运行,而完成 block 应该在调用该方法的任何队列中运行。
对于后者,我总是使用 dispatch_get_current_queue()
,但它似乎在 iOS 6 或更高版本中已被弃用。我应该改用什么?
最佳答案
“在调用者所在的任何队列上运行”的模式很吸引人,但最终不是一个好主意。该队列可能是低优先级队列、主队列或其他具有奇怪属性的队列。
我最喜欢的方法是说“完成 block 在具有以下属性的实现定义的队列上运行:x、y、z”,如果调用者想要更多控制权,则让 block 分派(dispatch)到特定队列。要指定的一组典型属性类似于“相对于任何其他应用程序可见队列的串行、不可重入和异步”。
** 编辑 **
Catfish_Man 在下面的评论中举了一个例子,我只是将它添加到他的答案中。
- (void) aMethodWithCompletionBlock:(dispatch_block_t)completionHandler
{
dispatch_async(self.workQueue, ^{
[self doSomeWork];
dispatch_async(self.callbackQueue, completionHandler);
}
}
关于objective-c - iOS 6 中用于完成 block 的 dispatch_get_current_queue() 的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13237417/
相关文章:
objective-c - Swift native 基类或 NSObject
iphone - 如何获得精确的时间,例如在 Objective-C 中以毫秒为单位?
iphone - 如何从 UITableViewCell 获取 UITableView?
objective-c - IOS:创建带有圆角的 UIImage 或 UIImageView
ios - 如何防止 UINavigationBar 在 iOS 7 中覆盖 View 顶部?
objective-c - 如何删除 MKMapView 上的所有注释
objective-c - 如何在 Objective-C 中检测未使用的方法和#import