如何减少在NSOperationQueue中使用waitUntilAllOperationsAreFinished的时间延迟

时间:2012-05-29 09:29:18

标签: iphone objective-c

我正在使用NSOperationQueue来获取设备的照片。当我回去时我正在打电话

[queue cancelAllOperations];
[queue waitUntilAllOperationsAreFinished];

这些行取消操作。操作取消很顺利,但回到上一页需要一些时间。

如何减少时间延迟。 提前致谢

1 个答案:

答案 0 :(得分:1)

cancelAllOperations不会立即取消当前正在执行的NSOperation,它只会向其发送取消消息(请参阅文档)。您可以定期检查操作是否已取消。例如:

if (!self isCancelled) {
    // continue executing
}

或者你可以通过一个Key Value Observer来监控-cancel信号(例如here)。

作为旁注,在“cancelAllOperations”之后调用“waitUntilAllOperationsAreFinished”是多余的。由于您首先调用cancelAllOperations,它应该立即返回。

最后,如果您还没有,我强烈建议您阅读Concurrency Programming Guide。多线程是一个非常复杂但非常宝贵的编程工具,它帮助我理解Objective-C实现的原理。