我有一个接受块和完成块的方法。第一个块应该在后台运行,而完成块应该在调用该方法的任何队列中运行。
对于后者我总是使用dispatch_get_current_queue()
,但似乎它在 iOS 6 或更高版本中已被弃用。我应该用什么来代替?
“在调用者所在的任何队列上运行”的模式很吸引人,但最终不是一个好主意。该队列可以是低优先级队列、主队列或具有奇怪属性的其他队列。
我最喜欢的方法是说“完成块在具有以下属性的实现定义的队列上运行:x,y,z”,并且如果调用者想要比这更多的控制,则让块分派到特定队列。要指定的一组典型属性类似于“相对于任何其他应用程序可见队列的串行、不可重入和异步”。
** 编辑 **
Catfish_Man 在下面的评论中举了一个例子,我只是将其添加到他的答案中。
- (void) aMethodWithCompletionBlock:(dispatch_block_t)completionHandler
{
dispatch_async(self.workQueue, ^{
[self doSomeWork];
dispatch_async(self.callbackQueue, completionHandler);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)