关于NSOperationQueue工作的困惑

时间:2013-09-11 15:15:20

标签: ios objective-c nsoperationqueue

Apple说道 操作队列通常提供用于运行其操作的线程。在OS X v10.6及更高版本中,操作队列使用libdispatch库(也称为Grand Central Dispatch)来启动其操作的执行。因此,无论是将它们指定为并发还是非并发操作,操作总是在单独的线程上执行。

据我从上面的理解,NSOperationQueue并行执行操作,让依赖思想放在一边。

我需要知道NSOperationQueue真的并行启动所有操作吗?它会打电话吗?   - 按时间顺序或按队列顺序逐个启动每个操作的启动方法?

2 个答案:

答案 0 :(得分:1)

正如Tim已经回答的那样,查看maxConcurrentOperationCount,如果将其设置为1,则操作将以串行方式执行。

此外,如果您担心执行操作的顺序但想要利用并行执行,则可以通过调用- (void)addDependency:(NSOperation *)operation来非常简单地设置NSOperation对象之间的依赖关系。

例如,您需要在操作2之前执行operation1,您可能会这样:

NSOperation *operation1;
NSOperation *operation2;
[operation2 addDependency:operation1];

答案 1 :(得分:0)

您可能对NSOperationQueue的maxConcurrentOperationCount属性感兴趣 - 它确定允许队列一次启动的任务数。