iOS控制器生命週期

2022-05-30 21:48:15 字數 2441 閱讀 3537

//

view載入完畢就會自動呼叫

- (void

)viewdidload;

//view即將顯示到window上

- (void

//view顯示完畢(已經顯示到視窗)

- (void

//view即將從window上移除(即將看不見)

- (void

//view從window上完全移除(完全看不見)

- (void

//view即將銷毀的時候呼叫

- (void

)viewwillunload ;

//view銷毀完畢的時候呼叫

- (void)viewdidunload;

控制器view的載入:

在面試中,面試官可能會問這樣的問題,loadview有什麼作用,它與viewdidload有何區別。首先我們得知道,控制器view是通過懶載入的方式進行載入的,即用到的時候再載入。

當我們用到控制器view時,就會呼叫控制器view的get方法,在get方法內部,首先判斷view是否已經建立,如果已存在,則直接返回存在的view,如果不存在,則呼叫控制器的loadview方法,在控制器沒有被銷毀的情況下,loadview也可能會被執行多次。

當控制器的loadview方法執行完畢,view被建立成功後,就會執行viewdidload方法,該方法與loadview方法一樣,也有可能被執行多次。在開發中,我們可能從未遇到過執行多次的情況,那什麼時候會執行多次呢?

比如a控制器push出b控制器,此時,視窗顯示的是b控制器的view,此時如果收到記憶體警告,我們一般會將a控制器中沒用的變數及view銷毀掉,之後當我們從b控制器pop到a控制器時,就會再次執行a控制器的loadview方法與viewdidload方法。

1.通過storyboard載入

當控制器通過storyboard載入時,需要指定storyboard的名稱,控制器view最終就是storyboard所描述的樣子,這個比較簡單,不做詳細闡述。

- (void)touchesbegan:(nsset*)touches withevent:(uievent *)event

2.通過xib載入

當控制器view通過xib載入的時候,可能會出現三種情況

a. 指定xib名稱(otherviewcontroller.xib),當我們指定了xib的名稱,loadview方法就會去載入對應的xib(otherviewcontroller.xib)

- (void)touchesbegan:(nsset*)touches withevent:(uievent *)event

b.不指定xib名稱1,如果我們不指定xib名稱,loadview就會載入與控制器同名的xib(testviewcontroller.xib)

- (void)touchesbegan:(nsset*)touches withevent:(uievent *)event

c.不指定xib名稱2,當沒有指定xib名稱,且沒有與控制器同名的xib時,會載入字首與控制器名相同而不帶controller的xib(testview.xib)。

3.不通過sb\xib載入

控制器view是存在的,只不過顏色為clearcolor,所以看到的黑色其實是uiwindow的。

4.重寫loadview方法

我們重寫testviewcontroller的loadview方法,裡面不做任何事

- (void

)loadview

結果跟上面一樣黑,不同的是,這次並沒有建立view。

如果我們希望控制器view載入出來的時候不是uiview而是其他控制項,比如uiimageview,那我們就可以重寫loadview

- (void

)loadview

結論

1.重寫loadview方法,則會根據重寫的loadview方法建立view

2.控制器通過storyboard載入,則根據storyboard的描述建立view

3.控制器view通過xib載入,則根據nibname對應的xib建立view

4.沒有指定nibname,則根據與控制器同名的xib建立view

5.沒有同名的xib,則根據與控制器名字首相同不帶controller的xib建立view

6.如果都沒有,則建立乙個空白的xib

storyboard載入的是控制器及控制器view,而xib載入的僅僅只是控制器的view

這裡指的view是指controller的view。它作為controler的屬性,生命週期在controller的生命週期內。就是說你的controller不能在view釋放前就釋放了。

iOS 控制器View的生命週期

控制器view的生命週期方法 只要是控制器的生命週期方法,都是以view開頭.控制器view載入完成時調 void viewdidload 控制器的view顯示完成時調 控制器的view即將顯示的時候調 控制器的view完全消失的時候呼叫 控制器的view即將消失的時候呼叫.布局控制器view的子控...

控制器的生命週期

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

控制器的生命週期

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