Tom*_*Tom 5 nsoperation nsoperationqueue afnetworking
我有一堆NSOperations添加到了NSOperationQueue.操作队列maxConcurrentOperationCount设置为1,以便NSOperations一个接一个地运行.
现在,在completionBlock一个NSOperation我想取消所有未决NSOperations调用cancelAllOperations的NSOperationQueue.
这样做安全吗?我可以确定start只有completionBlock在前一个操作完全执行后才调用下一个操作的方法吗?或者执行completionBlock上一个操作和当前操作的任务同时运行?
我之所以要问:我使用AFNetworking来执行一批AFHTTPRequestOperations并且只有在批量的所有先前请求都成功时才执行一个请求.
以下我的发现似乎不再适用.我在iOS 8和iOS 9上重新运行测试,并且操作的完成块总是与下一个操作同时运行.目前,我没有看到让操作等待前一个完成块完成的方法.
我刚刚在一个示例项目中尝试了这个场景.结果如下:
如果NSOperationQueue's maxConcurrentOperationCount设置为1,则队列中的NSOperation's completionBlock和下一个NSOperation同时运行.
但是,如果NSOperation通过调用addDependency:将每个操作链接到其先前的操作,则操作的执行将一直等到上一个操作completionBlock完成.
因此,如果要取消当前操作中的completionBlock下一个操作并确保在启动之前取消它,则必须在NSOperations调用之间设置依赖关系.addDependency:
| 归档时间: |
|
| 查看次数: |
2195 次 |
| 最近记录: |