【发布时间】:2014-11-11 01:59:31
【问题描述】:
我正在浏览一些解释如何在 NSOperationQueue 中管理 NSOperation 的文档。如果用户在进度面板中按下取消按钮或退出应用程序,我的重点是始终不执行操作。因此,取消操作以防止它不必要地消耗 CPU 时间。
所以,每当我需要取消操作时,我应该触发 cancel 方法以防止进一步执行。然后我将不得不定期使用操作对象状态 isCancelled 来检查操作是否被取消。以下是我对此的疑问:
(1) 在取消请求时,如果 NSOperation 正在从 NSOperationQueue 中删除,那么我们如何仍然引用该 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机制会取消所有操作,还是我应该有一些机制来避免无用的执行?
【问题讨论】:
标签: ios objective-c automatic-ref-counting nsoperation nsoperationqueue