我正在使用NSOperationQueue
和NSOperation
在后台点击上运行某些功能。
但是我希望能够在用户点击某个按钮时停止该操作。
我该怎么做?
类似的事,[currentoperation stop];
Cancel
- 不会对我有用。我想立即停止。
由于
答案 0 :(得分:15)
您应该调用-cancel
方法,并且操作本身必须支持通过监视isCancelled
属性/ keypath来取消,并在其值变为YES
时安全停止。如果NSOperation是您自己的,您可能必须创建自定义子类来实现此功能。您不能(安全地)强制任意操作立即停止。它必须支持被取消。
答案 1 :(得分:8)
使用Apple提供的任何内容NSOperation
,您无法立即停止。您可以像其他人在此处所建议的那样使用-[cancel]
,但当前操作仍会一直运行直到完成。在您的操作中接近使用-[isCancelled]
的一种方法是在整个代码中使用它(特别是在长时间运行的循环中)。类似的东西:
- (void)main {
// do a little work
if ([self isCancelled]) { return; }
// do a little more work
if ([self isCancelled]) { return; }
}
这样你就可以很快停止。
如果您希望真正强制线程停止,您可能需要研究信号处理。有一个threaded example here。将定制信号发送到特定线程,您可以以某种方式终止该线程。然而,这将是一项更多的工作,并且可能比它的价值更麻烦。
答案 2 :(得分:1)
您使用cancel
,并测试self
(NSOperation
)是否在执行期间被取消。