ios - NSOperation。取消与完成状态

标签 ios objective-c macos nsoperation nsoperationqueue

我有一个 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/

相关文章:

macos - CoreAudio实时线程与UI线程通信的正确方法是什么?

css - 所有网站文本在 Mac 上的 safari 上都是粗体

ios - 在 UITableView 中实现边距的更好方法?

iphone - 查找最近的CLLocation

iOS 7 自定义过渡故障

ios - 将横向模式下的模态视图显示在纵向模式下的另一个 View 之上

macos - 如何使Mac OSX Finder预览没有.txt或.text扩展名的编程文本文件?

ios - 将 DateTimePicker 时间增量从 1 分钟更改为 5 分钟

ios - 如何将文件添加到 iOS 模拟器?

objective-c - 目标 Action uicontrolevents