控制器生命週期方法(LifeCycle)

2022-05-03 07:06:09 字數 1604 閱讀 6724

1.init方法:

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

‍init方法中初始化viewcontroller本身

2.loadview方法: 

當view需要被展示而它卻是nil時,viewcontroller會呼叫該方法。不要直接呼叫該方法。

如果手工維護views,必須過載重寫該方法

如果使用ib維護views,必須不能過載重寫該方法

loadview和ib構建view 

3.viewdidload方法:

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

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

viewdidload後呼叫資料model

4.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使用者資料或其他很難被重新建立的物件  

viewdidload總是在loadview之後呼叫,不管你是不是通過nib檔案建立的,這個方法總是會被呼叫的。

viewdidunload在收到記憶體警告的時候呼叫,在我的理解,這個方法裡面應該做幾件事情:

1、釋放掉一些比較容易建立的物件,或者是一些比較佔資源的物件(、音訊等)

2、如果介面控制項自己保持了引用計數,這裡也要釋放掉。(比如說,這個控制項被設成了屬性,而且是retain的,這個retain的引用計數就必須釋放掉)

3、如果跨類的引數傳遞機制會在viewdidunload以後產生不正常的效果,這裡也必須處理。

5.dealloc方法:

viewdidunload和dealloc方法沒有關聯,dealloc還是繼續做它該做的事情

流程:

(loadview/nib檔案)來載入view到記憶體 ——>viewdidload函式進一步初始化這些view ——>記憶體不足時,呼叫viewdidunload函式釋放views —->當需要使用view時有回到第一步,如此迴圈。

控制器的生命週期

import mjoneviewcontroller.h inte ce mjoneviewcontroller property nonatomic strong nsarray property nonatomic strong nsarray persons end implementatio...

控制器的生命週期

關於viewdidunload 在發生記憶體警告的時候如果本檢視不是當前螢幕上正在顯示的檢視的話,viewdidunload將會被執行,本檢視的所有子檢視將被銷毀,以釋放記憶體,此時開發者需要手動對viewload viewdidload中建立的物件釋放記憶體。因為當這個檢視再次顯示在螢幕上的時候,...

控制器的生命週期

當乙個檢視控制器被建立,並在螢幕上顯示的時候。的執行順序 1 alloc建立物件,分配空間 2 init initwithnibname 初始化物件,初始化資料 3 loadview從nib載入檢視,通常這一步不需要去干涉。除非你沒有使用xib檔案建立檢視 4 viewdidload載入完成,可以進...