2012-08-26 82 views
1

我以View Controller A作爲根視圖控制器製作了UINavigationViewController,然後推送視圖控制器B. 當我在模擬器中模擬內存警告時,僅調用了A的didReceiveMemoryWarning。當然,我已經在A和B中都推翻了didReceiveMemoryWarning。 最終,我通過在A的didReceiveMemoryWarning中調用了B的didReceiveMemoryWarning解決了這個問題。但是我不知道爲什麼B的方法是自動調用的。 A的viewDidUnload和B的viewDidUnload都稱爲預期的,因爲我觸發警告,同時從B.didReceiveMemoryWarning在UINavigationController的視圖控制器堆棧中的某些視圖控制器中不會調用

呈現模態視圖控制器如果視圖控制器B是導航控制器的根,它的didReceiveMemoryWarning被稱爲沒有問題。

回答

1

我見過這種情況最常見的原因是:

  • 你在你的視圖控制器的一個叫[[NSNotificationCenter defaultCenter] removeObserver:self]。你不應該這樣做,因爲UIViewController註冊這樣的事情的通知。如果不使用iOS 5包含方法或普通視圖控制器呈現方法(presentViewController:和朋友),將視圖控制器的視圖作爲子視圖添加,您正在做一些與視圖控制器層次結構有點奇怪的事情。

+0

同意。如果做'pushViewController',你不應該有這個問題。但是有太多的開發者在做'addSubview' ... – Rob

+0

謝謝你的建議。但是他們都不能解決我的問題。 :(我已經刪除了所有「removeObserver:self」調用,並且已經使用pushViewController從A呈現視圖控制器B. – minorblend

+0

你說B的viewDidUnload被正確調用了,該調用的堆棧跟蹤是否包含內存警告通知?它通常是這樣的,也許這會讓你知道你的視圖控制器是否實際上正在接收這個通知(你能否在'didReceiveMemoryWarning'中有錯字?) –

相關問題