我有一个 NSOperation 和一个 NSOperationQueue,它有一堆子操作,有些在排队。
我遇到了一个问题,即使在对队列调用 cancelAllOperations 之后,我的主要方法仍然卡在 waitUntilAllOperationsAreFinished 上。
然后,当我在取消时设置用于 isFinished 的完整标志时,它不再在取消队列中备份。
- (BOOL)isFinished
{
return complete;
}
- (void)cancel
{
cancelled = YES;
complete = YES;
[_childOperationQueue cancelAllOperations];
}
这是正确的行为吗,取消的操作应该在技术上完成? 似乎 NSOperation 需要将 isFinished 设置为 true 才能将其删除,认为这可能允许它“清理”,但我不知道这里的协议(protocol)是什么,谷歌也没有透露太多。
最佳答案
取消操作只是将 isCancelled
设置为返回 YES
。这意味着在您的 NSOperation block 中,您可以检查 isCancelled
并防止执行任何不必要的工作(您需要自己实现此逻辑)。
您的主线程需要等待队列中的所有操作,但是如果您的 NSOperation block 在执行任何操作之前检查了 isCancelled
,您应该快速完成所有排队的操作并且等待不应该长。
关于ios - NSOperation。取消与完成状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24297064/