哪些任务比GCD更适合NSOperation?

时间:2010-12-03 11:03:04

标签: ios cocoa-touch nsoperation grand-central-dispatch

哪些任务更适合使用NSOperation而不是在为iPhone编程时使用GCD

对我来说,他们似乎做同样的事情。我看不出自己的优势和劣势。

4 个答案:

答案 0 :(得分:25)

NSOperation建立在GCD之上,因此问题更多的是您是使用NSOperation还是直接将块传递给GCD。

NSOperation体积庞大,需要更多的样板代码来设置它,但它有更多的功能。您可以在代码的各个部分中创建相同的NSOperation子类,并将它们放入队列并运行它。

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

所以每个都有它的优点。

答案 1 :(得分:13)

显然,NSOperationQueue是基于iOS 4的GCD构建的;文档尚未更新。请在这里查看Apple员工发布的帖子:https://devforums.apple.com/message/352770(您可能需要创建一个帐户)因此,您应该遵循Mike Abdullah的建议,并使用最简单的API来完成手头的任务。 dispatch_async是较低级别,通常是C类型的东西(但不限于此),适用于单次和顺序类型的交易(在此队列中触发此块,FTW)。 NSOperationQueues是更高级别的Objective-C,如果您在代码中的各个点添加大量操作,并且/或者需要管理并发性,优先级和依赖性,那么它们是很好的。至少我是如何使用它们的。

答案 2 :(得分:8)

与此类问题一样,请使用最简单的API。测量它是否是性能问题,然后在需要时重新评估。

答案 3 :(得分:3)

我不相信这里提到的一件事是NSOperation s可以在执行期间被取消,而一个块保证在执行开始后完成。话虽如此,可以暂停GCD队列(dispatch_suspend()),这样就不会执行当前正在执行的块之后的任何块。