Iphone addobserver/removeobserver查询
可以先使用Iphone addobserver/removeobserver查询,iphone,cocoa-touch,nsnotification,Iphone,Cocoa Touch,Nsnotification,可以先使用-removeObserver:,然后用相同的名称调用-addObserver:吗?或者在-removeObserver:之前先添加-addObserver:是一条规则吗 我用OS4.0试过了,看起来还可以(没有崩溃、警告等) 原因是为了防止使用相同的selectorName方法的两个观察者被调用两次,假设-setObserver方法在其内部-viewdiload并发出内存警告时被再次调用 另外,在-dealoc期间是否需要调用-removeObserver: 如果调用了两次-sele
-removeObserver:
,然后用相同的名称调用-addObserver:
吗?或者在-removeObserver:
之前先添加-addObserver:
是一条规则吗
我用OS4.0试过了,看起来还可以(没有崩溃、警告等)
原因是为了防止使用相同的selectorName
方法的两个观察者被调用两次,假设-setObserver
方法在其内部-viewdiload
并发出内存警告时被再次调用
另外,在
-dealoc
期间是否需要调用-removeObserver:
如果调用了两次-selectorName
,那么代码可能还有其他问题。即使Cocoa会优雅地删除您尚未添加的观察者,我也不会这么做
正如用户tonklon在评论中所说,您可能应该删除
-viewDidUnload
中的观察者。至于你的最后一个问题,在-dealloc
中删除观察者也是合理的,尽管最好的做法是构造代码,使删除观察者这样的事情发生在确定的时间,而不是作为内存管理的副作用。+1个好问题。我不知道删除以前未注册的观察者是否是保存,但我知道在解除分配之前必须删除该观察者。对于给定的情况,还可以在viewDidUnload中删除观察者。这就是此方法的用途:平衡在loadView和viewDidLoad中进行的所有调用。
-(void) setObserver
{
[[NSNotificationCenter defaultCenter] removeObserver:self
name:OBSERVER_NAME object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector: @selector(selectorName)
name:OBSERVER_NAME
object:nil];
}