【问题标题】:Using NSOperationQueue as a view controller instance variable使用 NSOperationQueue 作为视图控制器实例变量
【发布时间】:2012-06-16 14:20:43
【问题描述】:

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

【问题讨论】:

    标签: iphone ios cocoa-touch nsoperation nsoperationqueue


    【解决方案1】:

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

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

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

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

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

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


    原答案:

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

    讨论

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 2010-11-27
      • 1970-01-01
      • 2014-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多