【发布时间】:2012-01-24 15:43:12
【问题描述】:
当我取消 NSOperation(当用户按下按钮时)时,会从主线程调用取消方法,但显然该操作正在另一个线程中运行。 因此,为了避免在更改 _isExecuting 和 _isFinished 时出现竞争条件,我认为取消(或至少其逻辑)应该从与 NSOperation 相同的线程调用。除此之外,当用户取消它时,会删除几个文件并且需要时间。因为取消是从主线程调用的,所以所有应用都会有一段时间没有响应,这很丑。
如何在当前 NSOperation 所在的线程中执行取消代码?
我在 cancel 中尝试过这个(类似于我在 ASIHTTPRequest 中看到的):
if (_operationThread) {
[self performSelector:@selector(cancelOnRequestThread) onThread:_operationThread withObject:nil waitUntilDone:NO];
} else {
[self cancelOnRequestThread];
}
并且 _operationThread 在 start 方法中使用: _operationThread=[NSThread currentThread];
但它不起作用。
有什么想法或建议吗?
注意:我使用并发操作,所以我使用 start 而不是 main。
非常感谢您的帮助。 里卡多。
【问题讨论】:
标签: iphone objective-c ios nsoperation nsoperationqueue