如果我有一个具有NSOperationQueue
作为实例变量的视图控制器,那么如果视图控制器被卸载,那么在队列中执行的任何操作会发生什么?
答案 0 :(得分:2)
我原来回答中的愚蠢错误。我之前读过这个错误的文档。真正的答案是没有定义发生的事情或者至少没有记录。
正如我在this answer中提到的,有一些事情表明操作队列将被保留(就像在执行块时保留GCD队列一样)。
This question about autoreleasing an NSOperationQueue也说了同样的话:
文档中没有任何内容可以说明NSOperationQueue发布时会发生什么。
您当然可以解释“指定的操作在完成执行之前一直保留在队列中”,因为在排队的操作完成执行之前队列不会消失,但我仍然不会依赖它。 / em>的
但是,如果要在视图控制器卸载时将操作队列告诉cancelAllOperations
,如果要确保它们不执行,则可以取消操作。请注意,操作不是由他们自己停止。他们需要检查if ([self isCancelled]) { ... }
并停在那里。
所有操作都将完成执行,因为它们保留了队列。来自the documentation of addOperation:
的讨论强>
添加后,指定的操作将保留在队列中,直到完成执行。