如果我有一个具有NSOperationQueue
作为实例变量的视图控制器,那么如果视图控制器被卸载,队列中正在执行的任何操作会发生什么情况?
问问题
232 次
1 回答
2
我原来的答案中的愚蠢错误。我以前读错了这个确切的文档。真正的答案是它没有定义会发生什么,或者至少没有记录。
正如我在这个答案中提到的,有一些事情表明将保留操作队列(例如在执行块时保留 GCD 队列的事实)。
这个关于自动释放 NSOperationQueue 的问题也说了同样的话:
文档中没有说明释放 NSOperationQueue 时会发生什么。
您当然可以解释“指定的操作保留在队列中,直到它完成执行”,因为队列在入队操作完成执行之前不会消失,但我仍然不会指望它。
但是,如果您想确保它们不会执行,则可以取消操作,方法是告诉操作队列cancelAllOperations
何时卸载视图控制器(如果您想防止这种情况)。请注意,这些操作不会由它们自己停止。他们需要检查if ([self isCancelled]) { ... }
并停在那里。
原答案:
所有操作都将完成执行,因为它们保留了队列。从文档addOperation:
讨论
添加后,指定的操作将保留在队列中,直到完成执行。
于 2012-06-16T14:49:36.973 回答