繁体   English   中英

第二次将观察者添加到NSNotificationCenter会导致EXC_BAD_ACCESS

[英]Adding observer to NSNotificationCenter second time causes EXC_BAD_ACCESS

假设情景:

在我的viewDidLoad方法中,我将视图控制器添加为自定义通知的观察者(例如,通知MyFooNotification )。 稍后在加载视图的过程中,通知将被发布,控制器将对其进行处理。 当我离开控制器的视图时,我不会在viewDidUnload删除观察者(故意)。 下次打开视图时,观察者会再次添加,但现在当观察到的通知发布时 - 我得到EXC_BAD_ACCESS

任何人都可以解释为什么会这样。

PS我知道我应该在viewDidUnload删除它我只是对较低级别的细节感到好奇。

很可能是因为原始视图控制器已被释放,因为它是从导航堆栈(或类似的)弹出,但NSNotificationCenter仍然有一个对它的引用。 因此,当再次发布通知时, NSNotificationCenter尝试通知现在已解除分配的视图控制器并因此获取EXC_BAD_ACCESS

如果有一个对象自身添加到NSNotificationCenter作为一个观察者,你需要确保你在删除它dealloc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM