NSNotificationCenter:为什么要调用removeObserver?

23

众神给我的孤立丛林村庄带来了许多习惯,例如:

- (void) dealloc {

  [[NSNotificationCenter defaultCenter] removeObserver:self];
  [super dealloc];

}

他们的方法对我来说很奇怪,但我仍然希望理解它们。

如果实例即将消失,为什么还要清除松散的端?该实例的引用/保留计数不会被减少吗?它会使潜在的通知哈希表混乱吗,该哈希表保存了所有侦听器的列表?

2个回答

37

NSNotificationCenter 不会保留观察者。如果您不移除观察者,而观察者被释放,那么 NSNotificationCenter 就会持有一个悬空指针,当它下次尝试通知观察者时,很可能会导致崩溃。


8

虽然在实践中,许多未经启蒙的年轻人可能会逃避遵循仪式,因为幸运的是,乔布斯圣人已经赐予了许多超级类别一个removeObserver咒语,比如UINavigationController。尽管这并没有出现在我找到的任何经文中,但事实确实如此。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接