2009-09-08 51 views
0

當應用程序從低內存條件返回時(即內存不足,事情已被釋放並且應用程序現在恢復正常使用場景)時,會發生什麼該被初始化並通過在低內存條件處理後的'init'方法期間初始化數據

設置對象的狀態 - (ID)初始化

方法?

當您收到低內存警告時,您將保留所有數據並調用viewDidUnload方法。最終,視圖可能會重新載入,但類的'init'方法不會被第二次調用。

那麼你會堅持你已經在'init'方法中初始化並在應用程序的使用過程中後來操縱的任何狀態信息?

我在問什麼更具體的是,當從'內存不足'狀態返回時,'init'方法創建的其他相關數據類&是否會恢復。

回答

1

如果一個對象被釋放,你得到一個內存警報,那麼你必須再次執行init。它不會爲你做。

系統通常不會釋放您的對象,除非您通過釋放來釋放對象。你可能無法響應內存警報,或者你可以釋放一些視圖,並與他們,他們的一些擁有的對象。

viewDidUnload是一種讓你知道你的視圖是否被卸載的方法,在這種情況下你應該通過並清除你在viewDidLoad中做的事情。當你的視圖恢復時,viewDidLoad會再次被調用,你有機會重做所有的初始化。

viewDidUnload可能是你真正需要學習:

viewDidUnload當 控制器的畫面從 內存中釋放調用。

  • (無效)viewDidUnload

討論這種方法被稱爲爲 對口viewDidLoad方法。 在視圖控制器 需要釋放其視圖和與該視圖關聯的任何 對象釋放內存的低內存條件期間調用它。由於視圖 控制器經常存儲對 視圖和其他視圖相關對象的引用,因此您應該使用此方法以 放棄這些對象的所有權 ,以便可以將它們的內存回收到 。您應該只爲 對象執行此操作,您可以稍後在您的viewDidLoad 方法或 應用程序的其他部分輕鬆地重新創建 對象。您不應該使用此方法釋放用戶數據或任何不能輕易重新創建的 其他信息。

通常,使用的出口, 這是一個變量或屬性 包括IBOutlet中的關鍵字和是 使用界面生成器配置的圖控制器存儲 引用對象。 A 視圖控制器也可以存儲 指向其以編程方式創建 的對象的指針,例如在 viewDidLoad方法中。 放棄任何對象 (包括網點中的那些)的所有權的首選方式是使用 對應的訪問器方法來將對象的值設置爲零。 但是,如果您沒有給定對象的 訪問器方法,則可能必須顯式釋放對象 。有關 內存管理實踐的更多信息,請參閱 Cocoa的內存管理編程指南 。

在調用此方法時, 視圖屬性爲零。

特別注意事項如果您的視圖 控制器存儲到的意見 和其他自定義對象的引用,也 負責 其dealloc方法安全地放棄這些對象的 所有權。如果實施 這種方法,但在構建 應用iPhone OS 2.x中,您 dealloc方法應該釋放每 對象,但也應該 之前設置 引用該對象調用無超。

相關問題