2010-09-26 74 views
15

在一个代码中的一些点,可以加入像iPhone - 测试是否通知存在

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doSomething) name:@"Hello" object:nil]; 

我如何测试,如果该通知已经活跃在队列或已被删除,以防止添加重复?

谢谢。

+0

的可能的复制[如何避免添加多个NSNotification观察?](http://stackoverflow.com/questions/5658426/how-to-avoid-adding-multiple-nsnotification-observer) – 2016-01-04 12:59:07

回答

25

如果您的意思是“测试您是否已经注册为通知的观察者”,我不认为除了发布通知并看到您获得回调(可能会造成灾难性影响)之外, 。

如果存在双重添加的危险,我通常在添加之前使用[[NSNotificationCenter defaultCenter] removeObserver:self name:foo object:bar]

注册通知不会发生在队列中。之前将它添加

+4

没有知道的情况下移除观察者是没有危险的g是否有观察员要移除?是不是像发布一个已经发布的对象?会不会导致应用程序崩溃? – SpaceDog 2010-09-27 01:31:05

+0

@Digital Robot;我一直这样做。它不会崩溃。 – 2010-09-27 20:41:28

+4

1.它不像双释放/双免费,因为NSNotificationCenter不保留“目标”或“对象”(大概它保留“名称”)。 2. NSNotificationCenter记录(目标,选择器,名称,对象)元组。它*必须*,因为它在调用removeObserver:或removeObserver:name:object:时必须知道要删除的内容。 3.“删除”方法通常意味着“如果没有添加任何东西(例如' - [NSMutableSet removeObjectForKey:]',' - [NSArray removeObject:]') – 2010-09-28 19:52:03