UIViewController各方法的呼叫順序

2021-06-22 14:41:05 字數 1770 閱讀 3564

(1)init方法

在init方法中例項化必要的物件(遵從lazyload思想),

init方法中初始化viewcontroller本身。

(2)- (id)initwithnibname:(nsstring *)nibnameornil bundle:(nsbundle *)nibbundleornil

如果**中有重寫此方法,呼叫init方法時會預設呼叫這個方法。如果該方法中沒有對self.view新增子檢視,則呼叫順序為該方法->控制器的屬性設定方法->viewdidload。

但是!!!如果在該方法中為self.view新增了子檢視,則呼叫[self.view addsubview:whiteview

]的地方會馬上去呼叫

viewdidload方法,把

viewdidload執行完,再回來繼續執行- (id)initwithnibname:(nsstring *)nibnameornil bundle:(nsbundle *)nibbundleornil方法的**。

當控制器被initwithnibname:初始化並加入到導航控制器的棧中時,它不會載入nib檔案,直到nib檔案被實際顯示。因此控制器在nib檔案中定 義的內容,例如label,可能還沒有例項化。此時label可能只是乙個nil指標,需要額外使用**中實現的屬性來儲存資訊。

(3)loadview方法

無論xib還是**建立都會呼叫loadview方法,

如果檢視控制器不是通過nib檔案建立的,必須重寫該方法,給self.view賦值

;如果使用ib維護views,必須不能重寫該方法,否則ib定製的檢視會被覆蓋。

(4)viewdidload方法

無論xib還是**建立都會呼叫loadview方法,

重寫該方法以進一步定製view。

在iphone os 3.0及之後的版本中,還應該過載重寫viewdidunload來釋放對view的任何索引。

(5)viewdidunload方法

當系統記憶體吃緊的時候會呼叫該方法

記憶體吃緊時,在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中被release的物件必須是很容易被重新建立的物件(比如在viewdidload或其他方法中建立的物件),不要release使用者資料或其他很難被重新建立的物件

(6)didreceivememorywarning

從ios3.0開始,不需要過載這個函式,把釋放記憶體的**放到viewdidunload中去。

這個函式的預設實現是:檢查controller是否可以安全地釋放它的view屬性,如果view可以被釋放,那麼這個函式釋放view並呼叫viewdidunload。

你可以重寫這個函式來釋放controller中使用的其他記憶體。但要記得呼叫這個函式的super方法釋放view。

(7)dealloc方法

viewdidunload和dealloc方法沒有關聯,dealloc還是繼續做它該做的事情。當乙個物件的retain值為0時,就會呼叫它的方法dealloc。

Matrix的set,pre,post呼叫順序

matrix主要用於對平面進行平移 translate 縮放 scale 旋轉 rotate 以及斜切 skew 操作。為簡化矩陣變換,android封裝了一系列方法來進行矩陣變換 其中包括 1.set系列方法 settranslate,setscale,setrotate,setskew 設定,會...

Matrix的set,pre,post呼叫順序

參考 matrix的set,pre,post呼叫順序 matrix主要用於對平面進行平移 translate 縮放 scale 旋轉 rotate 以及斜切 skew 操作。為簡化矩陣變換,android封裝了一系列方法來進行矩陣變換 其中包括 set系列方法 settranslate,setsca...

Matrix的set,pre,post呼叫順序

matrix呼叫一系列set,pre,post方法時,可視為將這些方法插入到乙個佇列.當然,按照佇列中從頭至尾的順序呼叫執行.其中pre表示在隊頭插入乙個方法,post表示在隊尾插入乙個方法.而set表示把當前佇列清空,並且總是位於佇列的最中間位置.當執行了一次set後 pre方法總是插入到set前...