向 NSNotificationCenter 添加第二个观察者导致 EXC_BAD_ACCESS 错误。

3
假设场景:
在我的viewDidLoad方法中,我将视图控制器添加为自定义通知(例如,通知MyFooNotification)的观察者。稍后,在加载视图时,通知被发布并由控制器处理。当我离开带有其视图的控制器时,我故意不在viewDidUnload中删除观察者。下一次打开视图时,观察者会再次添加,但是现在当观察到的通知被发布时-我会收到EXC_BAD_ACCESS
有人能解释这是为什么吗?
附言:我知道我应该在viewDidUnload中删除它,我只是好奇更底层的细节。

好像有东西被释放了,但不应该被释放。 - Nick Moore
1个回答

5
很可能是由于原始的视图控制器已被释放,因为它从导航堆栈中移除(或类似情况),但 NSNotificationCenter 仍然引用它。因此,当再次发布通知时, NSNotificationCenter 尝试通知现在已被释放的视图控制器,并因此得到 EXC_BAD_ACCESS 结果。

如果您曾经有一个对象将自己添加到NSNotificationCenter 作为观察者,则需要确保在 dealloc 期间将其删除。


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