如何在NSOperationQueue中暂停NSOperation?
我需要暂停一个插入NSOperationQueue的正在运行的NSOperation。 目前我正在取消所有操作并重新启动它们。 但这会导致在完成流程方面出现某种重复。 我尝试使用NSOperationQueue的setSuspended标志。 但它并没有暂停这项行动。 有什么出路吗?
看到这个: 链接
这里来自苹果文档 :
挂起和恢复队列如果要暂时停止执行操作,可以使用setSuspended:方法挂起相应的操作队列。
挂起队列不会导致已执行的操作在其任务中间暂停。 它只是阻止计划执行新操作。 您可以暂停队列以响应用户请求暂停任何正在进行的工作,因为期望用户最终可能希望恢复该工作。
我没试过这个,但我可能会从这里开始:
- 在您的
NSOperation
子类中添加一个isPaused
标志 - 实现操作数据的复制/移动方法
- 如果暂停,则
setCancelled:
在setCancelled:
注意此更改) - 创建一个新的操作,将状态从暂停操作移动到新操作
- 如果愿意,调整优先级以重新排序队列中的操作顺序
- 将克隆添加到队列中
- 如果在
-main
从-main
返回
请注意,这只会暂停它。 如果你真的想暂停并明确恢复,你会想要恢复时手动“新操作”。
现在,如果您正在观察或有特殊的完成,那么您将遇到一些其他问题。 对于简单的情况,似乎这种方法似乎工作正常。