2011-03-25 91 views
3

假設的情景:添加觀察員NSNotificationCenter第二次導致EXC_BAD_ACCESS

在我viewDidLoad方法,我將視圖控制器作爲自定義通知(比如說,通知MyFooNotification)的觀察員。稍後在視圖加載的過程中,通知會發布並由控制器處理。當我離開控制器時,我不會刪除viewDidUnload中的觀察者(故意)。下次打開視圖時,觀察者會再次添加,但現在當觀察到的通知被髮布時 - 我得到EXC_BAD_ACCESS

任何人都可以解釋爲什麼這是發生。

P.S.我知道我應該在viewDidUnload中刪除它,我只是對低層細節感到好奇。

+0

聽起來像某些東西正在被釋放,不應該。 – 2011-03-25 09:37:11

回答

5

很可能是因爲原始視圖控制器因爲彈出導航堆棧(或類似)而被釋放,但NSNotificationCenter仍然有對其的引用。因此,當通知再次發佈時,NSNotificationCenter會嘗試通知現在已解除分配的視圖控制器,並因此獲取EXC_BAD_ACCESS

如果你有有一個對象作爲觀察者自己添加到NSNotificationCenter你需要確保你在dealloc期間刪除它。

相關問題