添加观察者是否会增加对象的保留计数?如果是,ARC是否也处理删除此观察者?如果不是,我应该在哪里删除观察者?
添加观察者是否会增加对象的保留计数?如果是,ARC是否也处理删除此观察者?如果不是,我应该在哪里删除观察者?
即使您使用 ARC
,也应该显式地移除观察者。创建一个 dealloc
方法并在其中移除。
您应该明确地删除观察者,即使您使用 ARC
。创建一个 dealloc
方法,在其中移除观察者。
-(void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
如果您看到这个方法,您不需要在这里调用[super dealloc];
,只需要在没有super dealloc的方法中使用。
针对Swift的更新
如果您正在编写Swift代码,则可以在deinit
方法中删除观察者。
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
deinit
方法中移除观察者是必要的。我曾经看到过与 NSNotificationCenter 相关的崩溃问题,通过移除观察者得以解决。 - Honghao Z