Use*_*234 6 macos cocoa objective-c nsoperation nsoperationqueue
我正在使用NSOperationQueue,并NSOperation在后台点击时运行一些功能.但是我希望能够在用户点击某个按钮时停止该操作.  
我该怎么做?
有点像,[currentoperation stop];
Cancel- 不会对我有用.我想马上停下来.
谢谢
Mik*_*ler 15
您应该调用该-cancel方法,并且操作本身必须通过监视isCancelled属性/ keypath 来支持被取消,并在其值变为时安全地停止YES.如果NSOperation是您自己的,您可能必须创建自定义子类来实现此功能.您不能(安全地)强制任意操作立即停止.它必须支持被取消.
使用Apple提供的任何东西都无法立即停止NSOperation.你可以-[cancel]像其他人在这里建议的那样使用,但是当前的操作仍然会一直运行直到完成.-[isCancelled]在操作中接近使用的一种方法,并在整个代码中撒上(特别是在长时间运行的循环中).就像是:
- (void)main {
    // do a little work
    if ([self isCancelled]) { return; }
    // do a little more work
    if ([self isCancelled]) { return; }
}
这样你就可以很快停止.
如果您希望真正强制线程停止,您可能需要研究信号处理.这里有一个线程示例.将定制信号发送到特定线程,您可以以某种方式终止该线程.然而,这将是更多的工作,并且可能比它的价值更麻烦.