阅读针对iOS 9的这篇文章后,我知道您不再需要removeObserver。
然而,对于iOS 8的,你需要给 removeObserver 在deinit中的viewController的方法。但我无法理解。如果一个viewController被释放,那么它的DEAD不是吗?为什么我们需要做一个removeObserver。作为观察员就像打电话给永远不会接电话的死者一样
deinit
我不明白什么?
您链接的文章已对此进行了详细说明:
通知中心现在保留对观察者的清零引用: 如果观察者能够存储为弱归零引用,则底层存储会将观察者存储为弱归零引用,或者如果对象不能弱存储(即,它具有自定义的保留/释放机制会阻止运行时) (因为能够弱地存储对象)将其存储为非弱的清零参考。
通知中心现在保留对观察者的清零引用:
如果观察者能够存储为弱归零引用,则底层存储会将观察者存储为弱归零引用,或者如果对象不能弱存储(即,它具有自定义的保留/释放机制会阻止运行时) (因为能够弱地存储对象)将其存储为非弱的清零参考。
在iOS 9之前,NSNotificationCenter没有使用weak引用来实现,因此NSNotificationCenter不知道目标已被释放。它盲目地将通知发送给已注册的任何目标。如果目标已被释放,则很糟糕(很可能崩溃)。因此,需要始终注销。
NSNotificationCenter
weak
在iOS 9中,NSNotificationCenter开始使用弱引用。这意味着它现在知道是否已释放了已注册的目标之一。这意味着它不再尝试将通知发送到已解除分配的目标。这意味着您不再需要在取消分配目标之前显式注销该目标。