iphone - 如何取消使用 addOperationWithBlock 创建的操作?

标签 iphone ios nsoperation nsoperationqueue

我正在使用 NSOperationQueue 的 addOperationWithBlock。在 block 内,我如何检查我是否应该取消操作?或者访问任何 NSOperation 属性/方法?

[myOperationQueue addOperationWithBlock: ^{

  while ( /* long running loop */ )
  {
      // how to determine here if I need to cancel?
      // for that matter, access any NSOperation properties/methods?

  }

}];

执行此操作的更好方法是使用 NSBlockOperation 吗?

最佳答案

更好的解决方案可能是使用 NSBlockOperation 并将其添加到队列而不是原始 block 。你可以这样做:

__block NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
  while(![operation isCancelled]){
    //Some long operation
  }
}];

[[self queue] addOperation:operation];

这让您可以使用 block ,同时让您对操作有更多的控制......还有一些 NSOperation 细节(例如添加完成 block 的能力)。

关于iphone - 如何取消使用 addOperationWithBlock 创建的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4962673/

相关文章:

ios - 链接两个 ViewController 时出错

iphone - 我应该使用 NSOperationQueue 和 NSOperation 而不是 NSThread 吗?

iphone - 编写 NSOperation 友好的方法

iphone - 使用 javascript 或 url 检测 iPhone 上已安装的应用程序

iphone - 具有多个根对象的 Restkit 对象映射

iphone - iPhone 上 webview 上的富文本编辑器

iphone - 更改 iPhone 启动画面时间

ios - "Missing architecture. Apps built with Watch OS 5.0 and later SDKs must contain additional architectures."

iphone - 使用 AVFoundation 逐帧录制音频和视频

ios - 对 UITableViewCell 使用 NSInvocationOperation 会导致某些 UIImageView 显示错误的图像?可能的重入问题?