为什么你要删除ios8中的观察者?

Hon*_*ney 5 nsnotificationcenter ios swift ios8

在阅读iOS 9的这篇文章后,我知道您不再需要删除Observer.

但是对于iOS 8,您需要viewControllerdeinit方法中删除Observer.但我无法理解它.如果一个viewController被释放,那么它的DEAD不是吗?为什么我们需要做一个removeObserver.它是一个观察者就像打电话给一个永远不会拿起电话的死人

我不明白的是什么?

rma*_*ddy 13

您在链接的文章中对此进行了详细说明:

通知中心现在保持对观察者的归零引用:

如果观察者能够存储为归零弱引用,则底层存储将把观察者存储为归零弱引用,或者如果对象不能被弱存储(即它具有可以阻止运行时的自定义保留/释放机制)从能够弱对象存储对象,它将对象存储为非弱的归零引用.

在iOS 9之前,NSNotificationCenter未使用weak引用实现,因此NSNotificationCenter不知道目标已被解除分配.它盲目地向任何已注册的目标发送通知.如果目标已被解除分配,这很糟糕(可能会崩溃).因此需要始终取消注册.

在iOS 9中,NSNotificationCenter开始使用弱引用.这意味着它现在知道其中一个已注册的目标是否已被解除分配.这意味着它不再尝试向解除分配的目标发送通知.这意味着您不再需要在取消分配之前显式取消注册目标.