当观察者变为零时,观察者会自动删除吗?

js_*_*js_ 3 iphone objective-c ios observer-pattern

我已经addObserver:selector:name:object:进入了viewDidLoad.

我正在用removeObserver:name:object:viewWillDisappear:animated:来移除观察者.

如果我通过传递错误的参数来删除观察者,会发生什么removeObserver:name:object:
(例如,如果我向参数name或错误对象传递错误通知,则不会删除观察者objectObserver)

如果观察者在调用后仍然不是nil removeObserver:name:object:,我可以发现删除观察者失败,因为notifySelector将被调用.

但如果观察者在打电话后变为零removeObserver:name:object:,我就无法确定是否移除观察者是否失败.

当观察者变为零时,观察者会自动移除吗?
或做notification dispatch tableNSNotificationCenter越来越大,大,并最终应用变得慢?

编辑

当我为观察者使用UIViewController对象的子类时,在dealloc调用ViewController之后应用程序不会崩溃.
但是当我使用其他类的对象时,应用程序会在dealloc调用对象后崩溃.

Mar*_*n R 10

更新:来自-[NotificationCenter removeObserver:]:

如果您的应用面向iOS 9.0及更高版本或macOS 10.11及更高版本,则无需在其dealloc方法中取消注册观察者.否则,你应该调用此方法或removeObserver:name:object:观察员之前或在指定的任何目标addObserverForName:object:queue:usingBlock:addObserver:selector:name:object:将被释放.

老答案:

观察者不会自动删除.从NSNotificationCenter类参考:

重要提示:通知中心不会保留其观察者,因此,您必须确保在取消分配之前取消注册观察者(使用removeObserver:或removeObserver:name:object :).(如果不这样做,如果中心向释放的对象发送消息,则会生成运行时错误.)

你应该打电话

[[NSNotificationCenter defaultCenter] removeObserver:self];
Run Code Online (Sandbox Code Playgroud)

在你的dealloc方法中,如果你不是100%确定以前没有删除观察者.