iphone - 编写 NSOperation 友好的方法

标签 iphone ios nsoperation

我有一个对象 (Processor),其中包含几个执行冗长计算的方法。我想在主线程和 NSOperation 子类中使用这些方法。

在我的 NSOperation 子类代码中,我重复调用了 isCancelled,因此取消响应相当灵敏。但是,当操作调用那些冗长的 Processor 方法之一时,它无法响应取消,直到该方法返回。

有没有一种好的方法来编写方法,使它们可以在有操作和没有操作的情况下使用?我正在考虑向我的 CPU 密集型 Processor 方法添加一个 operation 参数并像这样编写它们:

- (void)calculateWithOperation:(NSOperation *)operation {
    do {
        if (operation != nil && [operation isCancelled]) {
            return;
        }
        // Do some more calculation...
    } while (! finished);
}

// For convenient main thread execution.
- (void)calculate {
    [self calculateWithOperation:nil];
}

有没有其他人遇到过这个问题?有没有更好的办法?

最佳答案

NSOperation 响应取消的唯一方法是尽可能频繁地检查它是否被取消。毕竟,这只是一个需要在设置标志时退出的线程。基本上,需要 isCancelled 基础结构来优雅地释放操作的资源。所以我想说你只需要用支票来支付昂贵的费用。

关于iphone - 编写 NSOperation 友好的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4432368/

相关文章:

iphone - 显示文档时没有复制/粘贴和选择矩形的 UIWebView

iphone - size_t 持有什么样的数据?

ios - CollectionViewCell 的 subview 的渐变层仅在 View CONtroller 首次接纳时存在

ios - 在 NSOperation completionBlock 中时,animateWithDuration 无法正常运行

iphone - 在运行时创建新的对象模板 iPhone

iphone - iPhone/iPad 和 iPhone(Retina)/iPad(Retina) 中图像的理想分辨率

ios - Fabric 如何获取 iOS 设备的 iOS UDID?

iphone - 如何从另一个类访问我的 ViewController 的属性变量?

ios - 管理一堆具有依赖关系的 NSOperation

ios - NSOperation 与 Grand Central Dispatch