我们是否必须明确地将removeObserver:
发送给之前作为观察者添加到NSNotificationCenter
的对象?
我有点困惑,无法找到确切的答案。
请详细告诉我,包括为什么我们需要显式删除Observer,以及为什么编译器没有隐式地将它放在类/应用程序中?
答案 0 :(得分:13)
是的,你需要调用removeObserver:
,如果你没有,观察到的类可以调用观察者的所有解除分配的实例。
答案 1 :(得分:7)
从10.11开始,观察员不需要在他们的释放方法中取消注册。
NSNotificationCenter和NSDistributedNotificationCenter不再 向可能被解除分配的已注册观察员发送通知。如果 观察者能够存储为归零弱参考 底层存储将观察者存储为归零弱引用。 或者,如果对象不能被弱存储(因为它有一个 自定义保留/释放机制,将阻止运行时 能够微弱地存储对象)对象存储为 非弱归零参考。这意味着不需要观察者 取消注册他们的释放方法。[1]
答案 2 :(得分:5)
删除观察者总是一个明智的想法。 如果不删除观察者,即使对象已取消分配,仍会发送消息。它甚至可能附着在另一个物体上,这肯定会导致严重的麻烦。
答案 3 :(得分:2)
您始终需要删除KVO和通知的观察者。