【问题标题】:confusion about NSOperationQueue working关于 NSOperationQueue 工作的困惑
【发布时间】:2013-09-11 15:15:20
【问题描述】:

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

据我了解,NSOperationQueue 并行执行操作,让我们把依赖的想法放在一边。

我需要知道 NSOperationQueue 真的是并行启动所有操作吗?是否调用 -每个操作的启动方法是同时启动还是按队列顺序一个接一个?

【问题讨论】:

  • 您是如何配置队列的?你试过测试吗?

标签: ios objective-c nsoperationqueue


【解决方案1】:

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

另外,如果你关心操作的执行顺序但又想利用并行执行,你可以通过调用- (void)addDependency:(NSOperation *)operation来设置NSOperation对象之间的依赖关系。

例如,您需要在操作 2 之前执行操作 1,您可以这样:

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

【讨论】:

  • 我在操作队列中添加了一些 NSInvocationOperations。在队列(operationCount=0)中使用不同的 maxConcurrentOperationCount 记录了操作开始和结束的时间,发现不同的 maxConcurrentOperationCount 所用的时间不同。谢谢@MeXx
【解决方案2】:

您可能对 NSOperationQueue 的 maxConcurrentOperationCount 属性感兴趣 - 它决定了队列一次允许启动多少个任务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 2020-03-06
    • 2016-03-16
    • 2013-07-27
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    相关资源
    最近更新 更多