并发编程指南(PDF版)的第37和39页似乎是矛盾的。在第37页中,代码段指定了以下内容:
if (![anOp isConcurrent])
[anOp start];
else
[NSThread detachNewThreadSelector:@selector(start) toTarget:anOp withObject:nil];
这看起来很好,除了第39页的文档说明:
您可以使用调度队列执行几乎所有的任务 你曾经在不同的线程上执行。派遣的优势 队列是他们更容易使用,更有效率 执行那些任务而不是相应的线程代码。
所以不是调用detachNewThreadSelector:target:object:,而是为什么不调用dispatch_async()的代码呢?
答案 0 :(得分:0)
我可以看到你说的话。我认为每种方式都有效,但根据情况你应该选择去哪个根。需要注意的是NSOperationQueues
很好用;在mac osx中,他们使用GCD
进行优化,因此它们是一个不错的选择。在iOS 4及更低版本中,它们没有。因此,如果使用以前版本的iOS,则应该认真考虑使用GCD
。如果您发送新的NSThread
,操作系统必须保持切换线程,这可能是性能问题。 GCD
使用池方法,这意味着如果有好处,它将重新使用现有线程。
希望这能指出你正确的方向