可以先使用-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
期间调用ojit_code吗? 最佳答案
如果您两次调用-selectorName
,则您的代码可能还有其他问题。即使Cocoa愿意删除尚未添加的观察者,我也不会这样做。
正如用户tonklon在评论中所说,您可能应该删除-viewDidUnload
中的观察者。关于您的最后一个问题,删除-dealloc
中的观察者也是合理的,尽管构造代码的好习惯是使诸如除去观察者之类的事情在确定的时间发生,而不是作为内存管理的副作用。
关于iphone - addobserver/removeobserver查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3191368/