0

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

4

1 回答 1

2

我原来的答案中的愚蠢错误。我以前读错了这个确切的文档。真正的答案是它没有定义会发生什么,或者至少没有记录

正如我在这个答案中提到的,有一些事情表明将保留操作队列(例如在执行块时保留 GCD 队列的事实)。

这个关于自动释放 NSOperationQueue 的问题也说了同样的话:

文档中没有说明释放 NSOperationQueue 时会发生什么。

您当然可以解释“指定的操作保留在队列中,直到它完成执行”,因为队列在入队操作完成执行之前不会消失,但我仍然不会指望它。

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


原答案:

所有操作都将完成执行,因为它们保留了队列。从文档addOperation:

讨论

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

于 2012-06-16T14:49:36.973 回答