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

NSP*_*tik 4 objective-c nsoperation nsoperationqueue ios automatic-ref-counting

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

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

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

根据Apple Developer Class Reference:

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

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

dev*_*luv 6

首先,仅当其isFinished属性变为true 时才从Queue中删除操作.

其次,如果你释放B,那么队列将被释放并且操作也是如此.但是,您应该在代码中确保在以后的某个时间点没有引用这些操作对象或队列.