首先使用-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
?
答案 0 :(得分:3)
如果您的-selectorName
被调用了两次,那么您的代码可能还有其他一些问题。即使Cocoa在删除尚未添加的观察者方面优雅,我也不会这样做。
正如用户tonklon在评论中所说,你应该删除-viewDidUnload
中的观察者。关于你的上一个问题,删除-dealloc
中的观察者也是合理的,尽管构造代码是一种很好的做法,例如删除观察者之类的事情发生在确定的时间而不是内存管理的副作用。