1

Concurrency Programming Guide(PDF 版)的第 37 页和第 39 页似乎是矛盾的。在第 37 页中,代码片段指定了以下内容:

if (![anOp isConcurrent])
    [anOp start];
else
    [NSThread detachNewThreadSelector:@selector(start) toTarget:anOp withObject:nil];

这看起来不错,除了第 39 页的文档指出:

您可以使用调度队列来执行您过去在单独线程上执行的几乎所有任务。调度队列的优点是它们比相应的线程代码更易于使用并且在执行这些任务时效率更高。

那么为什么不调用 detachNewThreadSelector:target:object:,为什么代码不调用 dispatch_async() 呢?

4

1 回答 1

0

是的,我明白你在说什么。我认为每种方式都有效,但根据具体情况,您应该选择要使用的根目录。需要注意的是NSOperationQueues很好用;在 mac osx 中,它们用于GCD优化,因此它们是一个不错的选择。在 iOS 4 及更低版本中,它们不会。因此,GCD如果在以前版本的 iOS 上工作,使用是您应该认真考虑的事情。如果您调度一个新NSThread的操作系统必须不断切换线程,这可能是一个性能问题。GCD使用池方法,这意味着如果这样做很好,它将重新使用现有线程。

希望这会为您指明正确的方向

于 2012-06-22T08:14:32.500 回答