我是uisng addObserver:selector:name:object:
在viewDidLoad
。当观察者变为零时观察者会自动移除吗?
而我在viewWillDisappear:animated:
中使用removeObserver:name:object:
删除观察者。
如果我通过将错误的参数传递给removeObserver:name:object:
而导致观察者失败,会发生什么?
(例如,观察者不会被删除,如果我错了传递通知参数name
或错对象object
或Observer
)
如果观察者调用removeObserver:name:object:
后仍然没有零,我可以发现,除去观察者失败,因为notificationSelector将被调用。
但是如果观察者在调用removeObserver:name:object:
后变为零,我无法确定是否移除观察者失败。
当观察者变为零时,观察者会自动删除吗?
还是notification dispatch table
的NSNotificationCenter
变得越来越大,最终该应用程序变得缓慢?
编辑
当我使用的UIViewController对象观察员的子类,应用程序不会崩溃的ViewController的dealloc
被称为后。
但是当我使用其他类的对象时,应用程序在对象的dealloc
被调用后崩溃。
谢谢。我发现如果我使用UIViewController的子类作为观察者,运行时错误不会发生。如果我使用其他类的对象作为观察者,则会发生运行时错误。也许,UIViewController在'dealloc'中调用'removeObserver:self'。但我不知道如何检查超级类是否真的删除了观察者。 – 2012-07-19 10:50:45
我从(?)引用中搜索了引用,但找不到它,因此这可能是旧信息。现在看来在这个时候这仍然是正确的; NSNotificationCenter不会保留观察者,因为我将dealloc调用到某个对象上,而无需将其作为观察者移除。现在,当然,正确的做法是按照这个答案在dealloc中删除它。尽管如此,文件并没有说明观察员是否被保留,因此有点不清楚海事组织。 – Jonny 2014-04-09 02:53:31