removeObserver()是否删除所有观察者?

时间:2015-04-21 02:44:47

标签: swift nsnotificationcenter

以下是否删除了名称中添加了视图的所有NSNotificationCenter.defaultCenter?

NSNotificationCenter.defaultCenter().removeObserver(self)

如果我在viewDidLoad()的同一视图中有以下内容,是否会使用上面的一行删除它们?

NSNotificationCenter.defaultCenter().addObserver(self, selector: "method1", name: UITextFieldTextDidChangeNotification, object: nil)

NSNotificationCenter.defaultCenter().addObserver(self, selector: "method2", name: UITextViewTextDidChangeNotification, object: nil)

2 个答案:

答案 0 :(得分:34)

是的,removeObserver(self)调用将删除您使用addObserver:selector:name:object:添加自身观察者的所有观察者,无论您指定的通知名称,对象或选择器如何。

在对象的deinit方法中的任何地方使用removeObserver(self)方法是个坏主意,因为某些系统类(或您定义的对象的子类)可能添加了您不知道的观察者。该方法调用是一个“焦土”调用,从对象中删除所有观察者。

相反,您应该调用removeObserver:name:object:并仅删除您添加的观察者。

答案 1 :(得分:1)

从接收者的调度表中删除指定给定观察者的所有条目。 https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/index.html#//apple_ref/occ/instm/NSNotificationCenter/removeObserver

所以我猜它只会在所有观察者都与参数指定的相同时删除所有观察者。