2

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

在我的NSOperation子类代码中,我反复调用isCancelled,所以取消是相当敏感的。但是,当操作调用其中一个冗长的Processor方法时,它无法响应取消,直到该方法返回。

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

- (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];
}

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

4

1 回答 1

2

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

于 2010-12-13T19:08:48.517 回答