objective-c - iOS 6 中用于完成 block 的 dispatch_get_cur

我有一个接受 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

objective-c - 更改 UIButton 文本

ios - 如何防止 UINavigationBar 在 iOS 7 中覆盖 View 顶部?

objective-c - 如何删除 MKMapView 上的所有注释

objective-c - 如何在 Objective-C 中检测未使用的方法和#import

objective-c - 抑制警告 "Category is implementing a met

objective-c - iPad 纵向和横向模式的尺寸调整类