NSOperations及其completionBlocks同时运行吗?

Tom*_*Tom 5 nsoperation nsoperationqueue afnetworking

我有一堆NSOperations添加到了NSOperationQueue.操作队列maxConcurrentOperationCount设置为1,以便NSOperations一个接一个地运行.

现在,在completionBlock一个NSOperation我想取消所有未决NSOperations调用cancelAllOperationsNSOperationQueue.

这样做安全吗?我可以确定start只有completionBlock在前一个操作完全执行后才调用下一个操作的方法吗?或者执行completionBlock上一个操作和当前操作的任务同时运行?

我之所以要问:我使用AFNetworking来执行一批AFHTTPRequestOperations并且只有在批量的所有先前请求都成功时才执行一个请求.

Tom*_*Tom 5

以下我的发现似乎不再适用.我在iOS 8和iOS 9上重新运行测试,并且操作的完成块总是与下一个操作同时运行.目前,我没有看到让操作等待前一个完成块完成的方法.


我刚刚在一个示例项目中尝试了这个场景.结果如下:

如果NSOperationQueue's maxConcurrentOperationCount设置为1,则队列中的NSOperation's completionBlock和下一个NSOperation同时运行.

但是,如果NSOperation通过调用addDependency:将每个操作链接到其先前的操作,则操作的执行将一直等到上一个操作completionBlock完成.

因此,如果要取消当前操作中的completionBlock下一个操作并确保在启动之前取消它,则必须在NSOperations调用之间设置依赖关系.addDependency: