使用NSOperationQueue作为视图控制器实例变量

时间:2012-06-16 14:20:44

标签: iphone ios cocoa-touch nsoperation nsoperationqueue

如果我有一个具有NSOperationQueue作为实例变量的视图控制器,那么如果视图控制器被卸载,那么在队列中执行的任何操作会发生什么?

1 个答案:

答案 0 :(得分:2)

我原来回答中的愚蠢错误。我之前读过这个错误的文档。真正的答案是没有定义发生的事情或者至少没有记录

正如我在this answer中提到的,有一些事情表明操作队列将被保留(就像在执行块时保留GCD队列一样)。

This question about autoreleasing an NSOperationQueue也说了同样的话:

  

文档中没有任何内容可以说明NSOperationQueue发布时会发生什么。

您当然可以解释“指定的操作在完成执行之前一直保留在队列中”,因为在排队的操作完成执行之前队列不会消失,但我仍然不会依赖它。 / em>的

但是,如果要在视图控制器卸载时将操作队列告诉cancelAllOperations,如果要确保它们不执行,则可以取消操作。请注意,操作不是由他们自己停止。他们需要检查if ([self isCancelled]) { ... }并停在那里。


原始答案:

所有操作都将完成执行,因为它们保留了队列。来自the documentation of addOperation:

  的讨论      

添加后,指定的操作将保留在队列中,直到完成执行。