原文連結地址:http://www.cocoachina.com/bbs/read.php?tid=38766
UIView的一些基本方法理解UIView的一些基本方法理解:loadView、viewDidLoad、viewDidUnload、viewWillAppear、viewWillDisappear
經常使用UIView以及它的子類,一般對於init:,viewDidLoad:,dealloc:等方法應該是比較熟悉和瞭解的。
對於其它幾個基本方法就不那麼常用了,為了更好地編程使用這些方法,在此集中收集整理一下各方法調用的時機和作用:
init:方法
在init方法中執行個體化必要的對象(遵從LazyLoad思想)
init方法中初始化ViewController本身
loadView:方法
這是當沒有正在使用nib視圖頁面,子類將會建立自己的自訂視圖層。絕不能直接調用。
如果手工維護views,必須重載重寫該方法。
當view需要被展示而它卻是nil時,viewController會調用該方法。
loadView和IB構建view
你在控制器中實現了loadView方法,那麼你可能會在應用啟動並執行某個時候被記憶體管理控制調用。 如果裝置記憶體不足的時候, view 控制器會收到didReceiveMemoryWarning的訊息。 預設的實現是檢查當前控制器的view是否在使用。 如果它的view不在當前正在使用的view hierarchy裡面,且你的控制器實現了loadView方法,那麼這個view將被release, loadView方法將被再次調用來建立一個新的view。
viewDidLoad:方法
在視圖載入後被調用:
如果是在代碼中建立的視圖載入器,他將會在loadView方法後被調用;
如果是從nib視圖頁面輸出,他將會在視圖設定好後後被調用。
重載重寫該方法以進一步定製view
在iPhone OS 3.0及之後的版本中,還應該重載重寫viewDidUnload來釋放對view的任何索引
viewDidLoad後調用資料Model
viewDidUnload:方法
當系統記憶體吃緊的時候會調用該方法(註:viewController沒有被dealloc)
記憶體吃緊時,在iPhone OS 3.0之前didReceiveMemoryWarning是釋放無用記憶體的唯一方式,但是OS 3.0及以後viewDidUnload方法是更好的方式
在該方法中將所有IBOutlet(無論是property還是執行個體變數)置為nil(系統release view時已經將其release掉了)
在該方法中釋放其他與view有關的對象、其他在運行時建立(但非系統必須)的對象、在viewDidLoad中被建立的對象、快取資料等 release對象後,將對象置為nil(IBOutlet只需要將其置為nil,系統release view時已經將其release掉了)
一般認為viewDidUnload是viewDidLoad的鏡像,因為當view被重新請求時,viewDidLoad還會重新被執行
viewDidUnload中被release的對象必須是很容易被重新建立的對象(比如在viewDidLoad或其他方法中建立的對象),不要release使用者資料或其他很難被重新建立的對象
dealloc:方法
viewDidUnload和dealloc方法沒有關聯,dealloc還是繼續做它該做的事情
viewWillAppear: 方法
Called when the view is about to made visible. Default does nothing
視圖即將可見時調用。預設情況下不執行任何操作
viewDidAppear:
Called when the view has been fully transitioned onto the screen. Default does nothing
視圖已完全過渡到螢幕上時調用
viewWillDisappear:
Called when the view is dismissed, covered or otherwise hidden. Default does nothing
視圖被駁回時調用,覆蓋或以其他方式隱藏。預設情況下不執行任何操作
viewDidDisappear:
Called after the view was dismissed, covered or otherwise hidden. Default does nothing
視圖被駁回後調用,覆蓋或以其他方式隱藏。預設情況下不執行任何操作