如果任何任务在开始之前完成,NSOperationQueue 会同时运行所有任务吗?

NSOperationQueue runs all tasks at the same time if any task is finished before started?

我遇到了 NSOperationQueue 的一个奇怪问题。我有一个应用程序使用它来管理下载操作,因此它们 运行 "one-by-one"。不幸的是,我发现如果一个操作在它开始之前被取消,NSOperationQueue 似乎会崩溃并且 运行 它队列中的所有操作在它的剩余生命周期中一次。

这个"freak out"可以通过在取消操作时不设置"isFinished"来避免,除非它"isExecuting",但是如果操作在开始之前被取消,队列就会卡住.

有解决办法吗?也许替换 NSOperationQueue?

问题原来是通过在操作开始之前将“(bool)isFinished”设置为 YES,NSOperationQueue 变得混乱。解决方案是将“(bool)isCancelled”设置为YES,然后等到在NSOperation上调用start()方法将“(bool)isFinished”设置为YES。