取消操作时不调用NSOperation dealloc

时间:2012-02-29 04:28:22

标签: ios nsoperation

我在我的应用程序中使用NSOperation。 我在创建另一个操作时取消先前执行的操作。但是先前创建的操作的dealloc方法在取消该操作时不会调用。

请建议我。 谢谢。

2 个答案:

答案 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方法。