在取消请求时NSOperation从NSOperationQueue中移除的确切时间?

时间:2014-09-17 06:25:07

标签: ios objective-c automatic-ref-counting nsoperation nsoperationqueue

我正在阅读一些文档,解释如何在NSOperationQueue中管理NSOperation。我的重点是,如果用户在进度面板中按下取消按钮或退出应用程序,则根本不执行操作。因此,取消操作以防止它不必要地消耗CPU时间。

因此,每当我需要取消操作时,我应该触发 cancel 方法以防止进一步执行。然后我将不得不定期使用操作对象状态 isCancelled 来检查操作是否被取消。以下是我对此的疑问:

(1)在取消请求时,如果从NSOperationQueue中移除NSOperation,那么我们如何仍然引用该NSOperation及其属性 isCancelled

根据Apple Developer Class Reference:

  

NSOperationQueue类调节一组NSOperation对象的执行。添加到队列后,操作将保留在该队列中,直到明确取消或完成其任务为止。

(2)如果我使用ARC,我是否需要关注取消请求?我举个例子。我有2个视图控制器A和B.在B中,我使用NSOperation制作8到10个NSURLRequest并将所有请求放在NSOperationQueue中。这里NSOperationQueue的对象是视图控制器B的属性。因此,如果用户按下后退按钮返回到视图A,在ARC下,NSOperationQueue的对象应该被自动删除(当我弹出以查看A)。 ARC机制会取消所有操作,还是应该有一些机制来避免无用的执行?

1 个答案:

答案 0 :(得分:6)

首先,仅当其isFinished属性变为true时,才会从队列中删除操作。

其次,如果你释放B,那么队列将被解除分配和操作。但是你应该在你的代码中确保你以后没有引用这些操作对象或队列。