UiViewController生命週期

2021-06-19 15:40:09 字數 3111 閱讀 7790

uiviewcontroller生命週期

uiviewcontroller的初始化,可以手寫**生成也可以通過

xib生成

1手寫**的生成方法 -(

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

nibname必須要與呼叫的

inte***ce builder

檔名一致,但尚不包括副檔名,例如要使用「aa。

xib」則應寫為

[[uiviewcontroller  alloc]initwithnibname:@」aa」  bundle:nil]

nibbundle為在哪個檔案束中搜尋指定的

nib檔案,如在專案主目錄下,則可直接用

nil

但是該方法產生的檢視中的控制項沒有新增到檢視中去,此時通過iboult

關聯的ib

控制項為空

2 當使用

xib生成

uiviewcontroller

的時候

xib其實最後會把我們的設定儲存到乙個資料集(

xml檔案),當需要初始化構造乙個

vc的時候,回去讀取記錄的資料集,然後幫助我們動態的建立

vc,因此在初始化的時候會先找是不是實現了

initwithcoder

方法,如果實現了這個方法,就直接用

initwithcoder

方法建立乙個物件,如果沒有實現就用

init

方法,呼叫完初始化方法以後,緊接著會呼叫

awakefromnib

方法,在這個方法裡面我們可以進一步做初始化工作。

當執行-(void)viewdidload

這個方法的時候,說明

uiviewcontroller

檢視已經繪製成功

3uiviewcontroller的銷毀

當uiviewcontroller

裡面的檢視全部移除的時候,此時

uiviewcontroller

徹底從記憶體中銷毀

4記憶體警告

當多個uiviewcontroller

相互疊加的時候,記憶體可能不夠用,此時系統會發出記憶體警告,就會執行,

didreceivememorywarning

這個方法,

uiviewcontroller

中的view

不是啟用狀態的

view

,同時會執行

viewdidunload

這個方法,

uiviewcontroller

的檢視會被再次啟用,回到步驟2

uiviewcontroller是乙個類,這個類提供顯示

view

介面,同時包含

view

載入、解除安裝事件的重定義功能,在定義其子類實現的時候,必須在

inte***ce builder

中手動關聯

view屬性

-(void

)viewdidload

這個方法在viewcontroller

例項中的

view

被載入完畢後呼叫,如需要重定義某些要在

view

載入後立刻執行的動作或者介面修改,則應將**寫在函式中 -(

void

)viewdidunload

這個方法在viewcontroller

例項中的

view

被解除安裝完畢後呼叫,如需要重定義某些要在

view

載入後立刻執行的動作或者釋放的記憶體等動作,則應將**寫在函式中

ios應用程式的週期

在後天時程式會受到很多限制,這樣可以提高電池的使用和使用者體驗

1 應用程式的狀態

not running 程式沒有啟動

inactive 未啟用 程式在前台執行但是還沒有接到事件,在沒有事件處理的情況下,通常停留在這個狀態

active 程式在後台執行,而且接受到了事件,這也是前台的乙個正常的模式

background 後台 程式在後台,而且能執行**,大多數執行緒進入這個狀態後會在這個狀態多停留一會,時間到之後會進入掛起狀態(suspended

),有的程式經過特殊的請求後可以長期處於

background狀態

suspended  掛起 程式在後台不能執行**,系統會自動把城西變成這個狀態而不發出警告,當掛起時,程式還是停留在記憶體中,當系統記憶體低的時候,就會把掛起的程式清除掉,為前台程式提供更多的記憶體

在ios5

中,通知不會把程式變成啟用狀態,通知會顯示在狀態列中,如果拉下狀態列,程式就會變成

inactive

,把狀態列放回去,程式欄會變成

active

。按鎖屏鍵也是另外一種程式的終端,當你按下了鎖屏鍵,終止了所有的觸控事件,把

放到了後台,這時

狀態是inactive

,並進入後台

當使用者資料進入後台的時候

儲存使用者資料或狀態資訊,所有沒有存到磁碟的檔案或者資訊,在進入後台時,寫到磁碟中,因為程式可能會在後台中被殺死

釋放盡可能可以釋放的記憶體

預設的情況下是protected

,方法是

public的

oc不支援靜態的成員變數,

自動釋放池,是乙個容器,釋放自動釋放池的時候,其中的每個物件呼叫release

的方法,池子釋放後,其中的物件的引用計數會減少

1,做得是延遲釋放,當引用計數器為

0的時候,就會呼叫析構函式,釋放掉整個物件,不可以再被使用,但是位址還在,不可以對乙個物件進行兩次

release

。不要呼叫自己的

dealloc

方法,如果向乙個引用計數為

0 的物件傳送訊息,程式將會崩潰

在那個函式中new

出來的,就在哪個函式中被釋放掉,,當乙個物件不在使用了,就用

release

馬上釋放掉,可以節省空間,通過

class

方法建立的物件,都會把物件放在自動釋放池裡,所以物件在後面不用

release

,self class

判斷是基類還是子類

uiviewcontroller的生命週期

uiviewcontroller是ios程式中的乙個重要組成部分,扮演者乙個大管家的身份,管理著程式中的眾多檢視 何時載入view,載入的原則是什麼,檢視何時消失等問題,文件中講的都很詳細。controller的view最好在需要顯示時再去載入,並且在系統發出記憶體警告時釋放不必要的view及相關的...

UIViewController的生命週期

uiviewcontroller的生命週期 1.uiviewcontroller uiviewcontroller是ios頂層檢視的載體及控制器,使用者與程式介面的互動都是由uiviewcontroller來控制的 uiviewcontroller管理uiview的生命週期及資源的載入與釋放 uiv...

UIViewController的生命週期

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