2013-09-21 30 views
0

我正在閱讀一本關於iOS編程的書。假設我們有兩個視圖控制器(每個視圖控制器都有自己的視圖),在任何時候,我只能看到其中一個視圖控制器。當APP正在運行時,我通過模擬器發送了「內存警告」。根據這本書,我應該觀察隱藏的viewcontroller的viewDidLoad在我「強制」隱藏的那個顯示時再次被觸發。但我沒有看到它發生。當UIViewController的視圖變爲可見時,爲什麼不執行viewDidLoad?

換句話說,「記憶警告」應該會破壞不在屏幕上的視圖。但我看不到它。

這本書是爲iOS5編寫的。我想知道是否有在iOS6的一些+的行爲改變

感謝

回答

1

是的,行爲在iOS 6中發生了變化。從iOS 6開始,UIViewController確實在不是系統發送低內存警告時卸載其視圖。

viewDidUnload documentation是相當清楚的:

中的iOS 6.0已過時。視圖不再在低內存條件下清除,因此此方法從不被調用。

0

viewDidLoad相當於創建UIViewController的看法時。當UIViewController的視圖變爲可見時,viewWillAppear:viewDidAppear:是涉及的關鍵方法。

+0

謝謝。我只是編輯我的問題,以便更清楚。我只是想知道爲什麼「內存警告」不會導致視圖被破壞 –

+0

內存警告不會破壞具有強引用(也稱爲保留對象)的對象。它執行必須實現的方法才能釋放內存。如果你沒有釋放足夠的內存,你的應用程序最終可能會被終止。 – bneely

+0

當VIEW被第一次使用時= =不是它的初始化 –

0

viewDidLoad只會在viewController初始化時被調用。

也許你正在使用導航控制器或標籤欄視圖控制器調出你的視圖控制器 - 它們都不會釋放你的視圖控制器,因此viewDidLoad不會被調用。

+0

它在第一次使用VIEW時調用它=不是它的初始化 –

1

當第一次使用VIEW時會調用它。第一次加載。

所以當有人打電話時:viewController.viewviewController.isViewLoadedNO然後加載視圖並調用viewDidLoad

該視圖永遠不會卸載(自ios6)

相關問題