移除观察者是否是必要的?

3

我需要在整个应用程序的生命周期中使用一个观察者,我是否需要将其删除? 我认为GC会在应用程序关闭后将其删除,我是正确的吗? 如果是的话,那么我应该在什么时候删除它?在deinit中吗?


看一下这个。这是在你提供iOS 8支持的情况下,从iOS 9开始已经不再必要了,你可以在这里阅读更多信息。 - Rikh
太好了,请将此作为答案发送,以便我接受。 - AVEbrahimi
1个回答

5
如果您提供支持iOS 8及以下版本,则必须在deallocviewWillDisappear中删除观察者。更详细的答案可以在这里找到。
如果您从iOS 9开始提供支持,则不再需要手动删除观察者。根据苹果文档:
在OS X 10.11和iOS 9.0中,NSNotificationCenter和NSDistributedNotificationCenter将不再向可能被释放的已注册观察者发送通知。如果观察者能够作为零弱引用存储,则底层存储将将观察者作为零弱引用存储,或者如果对象无法弱存储(即它具有自定义保留/释放机制,该机制会防止运行时能够弱存储对象),则它将对象存储为非弱零引用。这意味着观察者不需要在其解除分配方法中取消注册。
更详细的解释可以在这里找到。
注意:但是,要谨慎使用基于块的通知,如上面链接的文档中所述。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接