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