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