如何在NSOperationQueue中暂停NSOperation?

我需要暂停一个插入NSOperationQueue的正在运行的NSOperation。 目前我正在取消所有操作并重新启动它们。 但这会导致在完成流程方面出现某种重复。 我尝试使用NSOperationQueue的setSuspended标志。 但它并没有暂停这项行动。 有什么出路吗?

看到这个: 链接

这里来自苹果文档 :

挂起和恢复队列如果要暂时停止执行操作,可以使用setSuspended:方法挂起相应的操作队列。

挂起队列不会导致已执行的操作在其任务中间暂停。 它只是阻止计划执行新操作。 您可以暂停队列以响应用户请求暂停任何正在进行的工作,因为期望用户最终可能希望恢复该工作。

我没试过这个,但我可能会从这里开始:

  • 在您的NSOperation子类中添加一个isPaused标志
  • 实现操作数据的复制/移动方法
  • 如果暂停,则setCancelled:setCancelled:注意此更改)
  • 创建一个新的操作,将状态从暂停操作移动到新操作
  • 如果愿意,调整优先级以重新排序队列中的操作顺序
  • 将克隆添加到队列中
  • 如果在-main-main返回

请注意,这只会暂停它。 如果你真的想暂停并明确恢复,你会想要恢复时手动“新操作”。

现在,如果您正在观察或有特殊的完成,那么您将遇到一些其他问题。 对于简单的情况,似乎这种方法似乎工作正常。