iOS 關(guān)于UIViewController視圖控制器的生命周期

一 ,視圖控制器生命周期指的是:控制器 ?被加載(viewDidLoad)--->視圖即將現(xiàn)實(shí)(viewWillAppear)--->視圖已經(jīng)顯示(viewDidAppear)--->視圖即將消失(viewWillDisappear)--->視圖已經(jīng)消失(viewDidDisappear) 這樣一個(gè)過程。


二炼蛤,視圖控制器在完成它整個(gè)生命周期的同時(shí)冒窍,系統(tǒng)也在調(diào)用相應(yīng)的函數(shù),控制生命周期的函數(shù)有以下幾個(gè):

1,- (void)viewDidLoad; ?( 視圖第一次被加載的時(shí)候調(diào)用甘磨,整個(gè)程序運(yùn)行過程中這個(gè)函數(shù)只會(huì)被調(diào)用一次逞泄,因此經(jīng)常會(huì)在這個(gè)函數(shù)里做一些初始化相關(guān)的工作 ) 患整;

2,- (void)viewWillAppear:(BOOL)animated; ?(控制器即將顯示的時(shí)候調(diào)用炭懊,默認(rèn)情況什么也不做并级,程序運(yùn)行過程中可能被調(diào)用多次 ); ?

3,- (void)viewDidAppear:(BOOL)animated;? ? ( 控制器已經(jīng)顯示的時(shí)候調(diào)用侮腹,默認(rèn)情況什么也不做嘲碧,程序運(yùn)行過程中可能被調(diào)用多次 );

4父阻,- (void)viewWillDisappear:(BOOL)animated;? ( 控制器即將消失的時(shí)候調(diào)用愈涩,默認(rèn)情況什么也不做,程序運(yùn)行過程中可能被調(diào)用多次 );

5加矛,- (void)viewDidDisappear:(BOOL)animated;? ( 控制器已經(jīng)消失的時(shí)候調(diào)用履婉,默認(rèn)情況什么也不做,程序運(yùn)行過程中可能被調(diào)用多次 )斟览;

三毁腿,為了驗(yàn)證上面的說法,我們創(chuàng)建一個(gè)工程來測試一下:

1苛茂,創(chuàng)建一個(gè)工程已烤,在ViewController里面實(shí)現(xiàn)視圖控制器生命周期的函數(shù),當(dāng)調(diào)用到相關(guān)的函數(shù)是輸出相關(guān)的日志妓羊;

// 視圖控制器第一次被加載的時(shí)候調(diào)用

- (void)viewDidLoad {

[super viewDidLoad];

self.view.backgroundColor = [UIColor redColor];

NSLog(@"視圖控制器A被加載了");

}

// 視圖控制器即將顯示的時(shí)候調(diào)用(還沒顯示)

- (void)viewWillAppear:(BOOL)animated{

NSLog(@"視圖控制器A即將顯示");

}

// 視圖控制器已經(jīng)顯示的時(shí)候調(diào)用

- (void)viewDidAppear:(BOOL)animated{

NSLog(@"視圖控制器A已經(jīng)顯示");

}

// 視圖控制器即將消失的時(shí)候調(diào)用(還沒消失)

- (void)viewWillDisappear:(BOOL)animated{

NSLog(@"視圖控制器A即將消失");

}

- (void)viewDidDisappear:(BOOL)animated{

NSLog(@"視圖控制器A已經(jīng)消失");

}

運(yùn)行以后控制臺(tái)輸出的結(jié)果如下:

2016-08-06 23:13:57.779 UIViewController-LifeCycle[2830:449138] 視圖控制器A被加載了

2016-08-06 23:13:57.779 UIViewController-LifeCycle[2830:449138] 視圖控制器A即將顯示

2016-08-06 23:13:57.784 UIViewController-LifeCycle[2830:449138] 視圖控制器A已經(jīng)顯示

2胯究,看到整個(gè)控制器的生命周期,我們自定義一個(gè)視圖控制器來做輔助躁绸,創(chuàng)建BViewController , 并在ViewController里面重寫touchBegan方法裕循,在touchBegan方法里面實(shí)現(xiàn)切換到BViewController控制器的目的臣嚣,代碼如下:

// 點(diǎn)擊屏幕是切換到B控制器

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event{

BViewController *bVc = [[BViewController alloc] init];

bVc.view.frame = [UIScreen mainScreen].bounds;

bVc.view.backgroundColor = [UIColor blueColor];

[self presentViewController:bVc animated:YES completion:nil];

}

3,在BViewController控制器里面業(yè)重寫touchBegan方法剥哑,當(dāng)點(diǎn)擊B的屏幕是返回到A(VeiwController)控制器硅则,代碼如下:

// 點(diǎn)擊B屏幕還退回到A

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event{

[self dismissViewControllerAnimated:YES completion:nil];

}

4,當(dāng)我們由A切換到B是株婴,控制臺(tái)→多輸出了兩行內(nèi)容:

2016-08-06 23:46:38.065 UIViewController-LifeCycle[2830:449138] 視圖控制器A即將消失

2016-08-06 23:46:38.575 UIViewController-LifeCycle[2830:449138] 視圖控制器A已經(jīng)消失

我們可以看到抢埋,當(dāng)A控制器消失以后,A控制器的整個(gè)生命周期就走完了督暂,所有響應(yīng)的函數(shù)都有被調(diào)用揪垄。 ?

5,為了證明viewDidLoad函數(shù)只會(huì)被調(diào)用一次逻翁,而其他的函數(shù)回被調(diào)用多次饥努,我們點(diǎn)擊B控制器的屏幕,返回到A控制器八回,當(dāng)返回到A以后在點(diǎn)擊A的屏幕切換到B酷愧,這個(gè)時(shí)候控制臺(tái)輸出了以下四行內(nèi)容:

2016-08-06 23:52:18.959 UIViewController-LifeCycle[2830:449138] 視圖控制器A即將顯示

2016-08-06 23:52:19.462 UIViewController-LifeCycle[2830:449138] 視圖控制器A已經(jīng)顯示

2016-08-06 23:52:24.381 UIViewController-LifeCycle[2830:449138] 視圖控制器A即將消失

2016-08-06 23:52:24.884 UIViewController-LifeCycle[2830:449138] 視圖控制器A已經(jīng)消失

可以發(fā)現(xiàn),系統(tǒng)這次沒有調(diào)用viewDidLoad函數(shù)缠诅,其他的都有調(diào)用溶浴;反復(fù)這樣做幾次結(jié)果都是一樣,所以可以印證開始的說法管引,viewDidLoad函數(shù)在整個(gè)程序運(yùn)行過程中只會(huì)被調(diào)用一次士败,其他接個(gè)函數(shù)可能會(huì)被調(diào)用多次。

以上內(nèi)容都是個(gè)人理解褥伴,如有不對或者不足希望大家指正谅将!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市重慢,隨后出現(xiàn)的幾起案子饥臂,更是在濱河造成了極大的恐慌,老刑警劉巖似踱,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隅熙,死亡現(xiàn)場離奇詭異,居然都是意外死亡核芽,警方通過查閱死者的電腦和手機(jī)囚戚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狞洋,“玉大人弯淘,你說我怎么就攤上這事绿店〖茫” “怎么了庐橙?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長借嗽。 經(jīng)常有香客問我态鳖,道長,這世上最難降的妖魔是什么恶导? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任浆竭,我火速辦了婚禮,結(jié)果婚禮上惨寿,老公的妹妹穿的比我還像新娘邦泄。我一直安慰自己,他們只是感情好裂垦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布顺囊。 她就那樣靜靜地躺著,像睡著了一般蕉拢。 火紅的嫁衣襯著肌膚如雪特碳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天晕换,我揣著相機(jī)與錄音午乓,去河邊找鬼。 笑死闸准,一個(gè)胖子當(dāng)著我的面吹牛益愈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播夷家,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼腕唧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瘾英?” 一聲冷哼從身側(cè)響起枣接,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缺谴,沒想到半個(gè)月后但惶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡湿蛔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年膀曾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阳啥。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡添谊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出察迟,到底是詐尸還是另有隱情斩狱,我是刑警寧澤耳高,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站所踊,受9級特大地震影響泌枪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜秕岛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一碌燕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧继薛,春花似錦修壕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至诈皿,卻和暖如春林束,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背稽亏。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工壶冒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人截歉。 一個(gè)月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓胖腾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瘪松。 傳聞我的和親對象是個(gè)殘疾皇子咸作,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容