恰好当NSOperation从NSOperationQueue中删除请求时被删除?
我正在浏览一些文档,解释如何在NSOperationQueue中管理NSOperation。 我的重点是,如果用户在进度面板上按下取消按钮或退出应用程序,始终不会执行操作。 因此,取消操作以防止不必要地占用CPU时间。
所以,每当我需要取消操作时,我都应该使用取消方法来阻止进一步的执行。 然后我必须定期使用操作对象状态isCancelled来检查操作是否被取消。 这是我的问题:
(1)在取消请求时,如果NSOperation被从NSOperationQueue中删除,那么我们仍然如何参照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机制取消,或者我应该有一些机制来避免无用的执行?
纠正我,如果我错了。 这个问题的回答和建议肯定会帮助我开发具有最佳性能的应用程序。
感谢您的建议。 提前致谢。
首先,只有当它的isFinished
属性变为真时,才从Queue中删除操作。
其次,如果你释放B,那么队列将被处理,操作也是如此。 但是你应该确保你的代码中没有在稍后的时间引用这些操作对象或Queue。
上一篇: Exactly when NSOperation is removed from NSOperationQueue on cancelling request?