我在我的应用程序中使用NSOperation。 我在创建另一个操作时取消先前执行的操作。但是先前创建的操作的dealloc方法在取消该操作时不会调用。
请建议我。 谢谢。
答案 0 :(得分:3)
我认为你需要的是isFinished返回YES并且isExecuting在取消后返回NO。否则,操作对象将永远不会被释放。
文件说。
除了简单地在取消操作时退出,它也是 将取消的操作移动到适当的位置也很重要 最终状态。具体来说,如果您管理isFinished的值 并且自己正在执行属性(也许是因为你是 实现并发操作),您必须更新这些变量 因此。具体而言,您必须更改返回的值 isFinished为YES,isExecuting返回的值为NO。您 即使操作在此之前被取消,也必须进行这些更改 开始执行。
答案 1 :(得分:1)
那很好:
Responding to the Cancel Command
将操作添加到队列后,操作就会超出您的操作范围 手中。队列接管并处理该任务的调度。 但是,如果您稍后决定不想执行 毕竟操作 - 因为用户按下了取消按钮 进度面板或退出应用程序,例如 - 您可以取消 操作以防止它不必要地消耗CPU时间。你做 这可以通过调用操作对象本身的取消方法或通过 调用NSOperationQueue类的cancelAllOperations方法。
取消操作不会立即强制它停止它 是在做。虽然尊重isCancelled返回的值是 期望所有操作,您的代码必须明确检查该值 通过此方法返回并根据需要中止。默认 NSOperation的实施确实包括取消检查。 例如,如果在start方法之前取消操作 在调用时,start方法退出而不启动任务。
当没有其他对象正在使用它时,当对象的保留计数达到零时,将调用dealloc
方法。