哪些任务比GCD更适合NSOperation?

哪些任务会更适合使用NSOperation而不是使用GCD进行iPhone编程?

对我来说,他们似乎也是这样做的。 我看不出其中的优点和缺点。

NSOperation是build立在GCD之上的,所以问题更多的是关于你是使用NSOperation还是直接传给GCD。

一个NSOperation是庞大的,需要更多的锅炉代码来设置它,但它有更多的function。 你可以在你的代码的不同部分创build相同的NSOperation子类,并把它们放到队列中运行。

通过例如dispatch_async传递一个块到GCD是快速和一次性的。 您通常不会在其他地方重新使用块; 您只需设置一个只在代码的那一点执行的代码块,将其传递给GCD或其他API,然后快速继续。

所以每个人都有其优点。

显然,NSOperationQueue是基于iOS 4开发的GCD, 该文件只是没有更新。 请查看苹果公司员工的这篇文章: https : //devforums.apple.com/message/352770 (您可能需要创build一个账户)所以,您应该遵循Mike Abdullah的build议,并使用最简单的API来完成任务。 dispatch_async是较低级别的,通常是Ctypes的东西(但不限于此),对于一次性和顺序types的交易(在该队列上触发此块,FTW)是有利的。 NSOperationQueues是更高层次的Objective-C的东西,如果你在你的代码的不同位置添加了很多操作,并且/或者需要pipe理并发性,优先级和依赖关系,那么它们是非常好的。 至less我是这样使用它们的。

像往常一样,使用最简单的API。 衡量是否是一个性能问题,然后根据需要重新评估。

我不相信的一件事就是在执行过程中NSOperation可以被取消,而一旦执行完成,一个块将被保证完成。 话虽如此,GCD队列可以暂停( dispatch_suspend() ),以便当前正在执行的块之后的任何块都不会被执行。