3

假设场景:

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

谁能解释为什么会这样。

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

4

1 回答 1

5

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

如果您曾经有一个对象将自己添加NSNotificationCenter为观察者,您需要确保在dealloc.

于 2011-03-25T09:38:44.613 回答