addobserver/removeobserver查询

mar*_*ark 5 iphone cocoa-touch nsnotification

可以先使用-removeObserver:,然后-addObserver:使用相同的名称调用吗?或者-addObserver:之前有先行规则-removeObserver:

我尝试使用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]; 
}
Run Code Online (Sandbox Code Playgroud)

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

另外,我需要在调用-removeObserver:期间调用-dealloc吗?

Chr*_*son 3

如果您被-selectorName调用两次,则您的代码可能存在其他问题。即使 Cocoa 会优雅地删除你尚未添加的观察者,我实际上也不会这样做。

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