5

可以先用,再用同名-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]; 
}

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

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

4

1 回答 1

3

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

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

于 2010-11-22T09:15:36.477 回答