addobserver / removeobserver查询

时间:2010-07-07 01:47:51

标签: iphone cocoa-touch nsnotification

首先使用-removeObserver:然后使用相同名称调用-addObserver:是否可以?或者-addObserver:之前-removeObserver:首先是<{1}}吗?

我尝试使用OS 4.0,看起来没问题(没有崩溃,警告等等)。

-(void) setObserver
{
[[NSNotificationCenter defaultCenter] removeObserver:self 
                                                name:OBSERVER_NAME object:nil]; 

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector: @selector(selectorName)
                                             name:OBSERVER_NAME 
                                           object:nil]; 
}

原因是为了防止两个具有相同selectorName方法的观察者被调用两次,假设-setObserver方法在其-viewDidLoad内部被发出并且发出内存警告时再次被调用。

另外,我是否需要在-removeObserver:期间调用-dealloc

1 个答案:

答案 0 :(得分:3)

如果您的-selectorName被调用了两次,那么您的代码可能还有其他一些问题。即使Cocoa在删除尚未添加的观察者方面优雅,我也不会这样做。

正如用户tonklon在评论中所说,你应该删除-viewDidUnload中的观察者。关于你的上一个问题,删除-dealloc中的观察者也是合理的,尽管构造代码是一种很好的做法,例如删除观察者之类的事情发生在确定的时间而不是内存管理的副作用。