您链接的文章已对此进行了详细说明:
通知中心现在保留对观察者的清零引用:
如果观察者能够存储为弱归零引用,则底层存储会将观察者存储为弱归零引用,或者如果对象不能弱存储(即,它具有自定义的保留/释放机制会阻止运行时)
(因为能够弱地存储对象)将其存储为非弱的清零参考。
在iOS
9之前,
NSNotificationCenter没有使用
weak引用来实现,因此
NSNotificationCenter不知道目标已被释放。它盲目地将通知发送给已注册的任何目标。如果目标已被释放,则很糟糕(很可能崩溃)。因此,需要始终注销。
在iOS
9中,
NSNotificationCenter开始使用弱引用。这意味着它现在知道是否已释放了已注册的目标之一。这意味着它不再尝试将通知发送到已解除分配的目标。这意味着您不再需要在取消分配目标之前显式注销该目标。



