本文档说operations
已被弃用,没有替换函数的提示:
https://developer.apple.com/documentation/foundation/nsoperationqueue/1415168-operations?language=objc
Xcode 将可能的替代品列为addBarrierBlock:
但没有文档。
我有十几个类RenderOperation
的操作和一个依赖于所有RenderOperation
对象的类RenderCompleteOperation
操作。
我的问题是,如果我调用cancelAllOperations
,我仍然需要我的单个RenderCompleteOperation
运行 - 如果它仍在等待完成其依赖项,那么它的main
方法将永远不会运行。
所以我需要一种方法来取消RenderOperation
对象,并且不知道如何在不调用operations
的情况下执行此操作。
操作可以依赖于不同队列中的操作,因此您可以将最终操作放在与工作线程操作不同的队列上,并在工作线程队列上使用cancelAllOperations
。
另一种选择是覆盖最终操作的cancel
函数,使其不执行任何操作,并在完成任务时手动设置executing
和finished
。
第三种选择是保留一组工作线程操作,并在循环中自己取消每个操作(无论如何,这就是cancelAllOperations
所做的一切)
您可以在RenderCompleteOperation
的所有依赖项上调用cancel
:
renderCompleteOperation.dependencies.forEach { $0.cancel() }
然后它将立即执行。