iOS 控制器ViewController的生命周期,以及各個(gè)方法調(diào)用的順序

所謂控制器的生命周期时肿,無(wú)非就是幾個(gè)方法的調(diào)用順序(如下方法按照順序執(zhí)行):

  • 加載根視圖
/* 加載根視圖 */
- (void)loadView {
    [super loadView];
    //控制器的根視圖View是懶加載的;
    //加載View,創(chuàng)建View,優(yōu)先級(jí)最高;
    //從nib載入視圖,通常這一步不需要去干涉命锄。除非你沒(méi)有使用xib文件創(chuàng)建視圖纳胧。(在定制 VC 時(shí)掐暮,如果覆蓋loadView方法涂佃,不需要調(diào)用[super loadView] 方法
    //1.如果你要重寫loadView,可以自定義一個(gè)與系統(tǒng)不一樣的View
    //2.可以在根視圖中添加一些一些子視圖
    NSLog(@"%s",__FUNCTION__);

}
  • 控制器加載完畢的時(shí)候
- (void)viewDidLoad {
    [super viewDidLoad];
    
    //1.可以為控制器自定義數(shù)據(jù),數(shù)據(jù)加載
    //2.動(dòng)態(tài)創(chuàng)建其他控件(同名南昌會(huì)在這里做各種初始數(shù)據(jù)的載入,初始設(shè)定等很多內(nèi)容)
    NSLog(@"%s",__FUNCTION__);
}
  • 控制器的View即將顯示
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    //進(jìn)行一些顯示前的處理,比如鍵盤彈出,一些特殊過(guò)程動(dòng)畫,比如狀態(tài)欄和* navigationbar*的顏色等
    //不會(huì)調(diào)整初始狀態(tài)的界面布局;
    //在視圖要展示出來(lái)之前,做些準(zhǔn)備操作,約束還沒(méi)生效;
     NSLog(@"%s",__FUNCTION__);
}

在- (void)viewWillAppear:(BOOL)animated 與 - (void)viewDidAppear:(BOOL)animated 之間還要執(zhí)行兩個(gè)關(guān)鍵的方法:

  • 根視圖即將布局子視圖
/* 根視圖即將布局子視圖 */
- (void)viewWillLayoutSubviews {
    [super viewWillLayoutSubviews];
      //Subviews的布局調(diào)整完畢之前要做的一些事情;
    /* 在根視圖或者它的子視圖的frame值發(fā)生改變 */
    /* 或者當(dāng)前屏幕的狀態(tài)發(fā)生改變時(shí)調(diào)用 */
    NSLog(@"%s",__FUNCTION__);
}
  • 根視圖已經(jīng)完成子視圖的布局
/* 根視圖已經(jīng)完成子視圖的布局 */
- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    //Subviews的布局調(diào)整完畢之后要做的一些事情;
      /* 比如,一旦imageView的frame值改變,切圓角的操作就放在這里進(jìn)行 */
    NSLog(@"%s",__FUNCTION__);
    
}
  • 控制器的View已經(jīng)顯示
/* 控制器的View已經(jīng)顯示 */
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    
    //視圖展示出來(lái)之后,約束已經(jīng)生效;
    NSLog(@"%s",__FUNCTION__);
    
}
  • 控制器的View即將消失
/* 控制器的View即將消失*/
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    //視圖即將從屏幕移除之前執(zhí)行,此時(shí)還沒(méi)有調(diào)用`removeFromSuperview`,視圖即將被移除,覆蓋時(shí)會(huì)在這里做一些善后處理和設(shè)置
     NSLog(@"%s",__FUNCTION__);
    
}
  • 控制器的View已經(jīng)消失
/* 控制器的View已經(jīng)消失*/
- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    //視圖已經(jīng)從屏幕上移除了稻轨,用戶看不到這個(gè)視圖了灵莲。此時(shí)已調(diào)用removeFromSuperview。
    //釋放一些不再需要的資源,與UI顯示有關(guān)的資源
    NSLog(@"%s",__FUNCTION__);
    
}

  • 接收到內(nèi)存警告
/* 接收到內(nèi)存警告 */
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    NSLog(@"%s",__FUNCTION__);
}

過(guò)時(shí)的方法 iOS6.0 之前

  • 即將銷毀View
/* 即將銷毀View */
- (void)viewWillUnload {
    // 發(fā)生內(nèi)存警告時(shí)殴俱,在對(duì)其他視圖銷毀前調(diào)用政冻。
    //銷毀View
    NSLog(@"%s",__FUNCTION__);
}
  • 已經(jīng)銷毀View
/* 已經(jīng)銷毀View */
- (void)viewDidUnload {
    //發(fā)生內(nèi)存警告時(shí),如果視圖不是當(dāng)前屏幕正在顯示的視圖线欲,viewDidUnload將會(huì)被執(zhí)行赠幕,本視圖所有子視圖將被銷毀以釋放內(nèi)存,此時(shí)開發(fā)者需要手動(dòng)對(duì)viewLoad询筏、viewDidLoad中創(chuàng)建的對(duì)象釋放內(nèi)存榕堰。因?yàn)楫?dāng)這個(gè)視圖再次顯示在屏幕上的時(shí)候viewLoad、viewDidLoad會(huì)再次被調(diào)用嫌套。
    //銷毀一些不必要的屬性 和數(shù)據(jù)
    NSLog(@"%s",__FUNCTION__);
}

** 給各個(gè)控制器view子控件添加約束**


圖一.png

程序第一次運(yùn)行,顯示第一個(gè)控制器的時(shí)候,按照如下順序執(zhí)行:


輸出臺(tái)1.png

由第一個(gè)控制器右上角item按鈕跳到第二個(gè)控制器的時(shí)候,執(zhí)行打印:


輸出臺(tái)2.png

由第二個(gè)控制器View中的button按鈕跳到第三個(gè)控制器的時(shí)候,執(zhí)行打印:


輸出臺(tái)3.png

第二個(gè)控制器返回至第一個(gè)控制器的執(zhí)行打印:


輸出臺(tái)4.png

第三個(gè)控制器返回至第二個(gè)控制器的執(zhí)行打印:


輸出臺(tái)5.png

源碼鏈接

參考文獻(xiàn)

UIViewController的生命周期及iOS程序執(zhí)行順序
簡(jiǎn)書:學(xué)豆-控制器的生命周期

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末逆屡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子踱讨,更是在濱河造成了極大的恐慌魏蔗,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痹筛,死亡現(xiàn)場(chǎng)離奇詭異莺治,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)帚稠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門谣旁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人滋早,你說(shuō)我怎么就攤上這事榄审。” “怎么了杆麸?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵搁进,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我昔头,道長(zhǎng)饼问,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任揭斧,我火速辦了婚禮莱革,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己驮吱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布萧吠。 她就那樣靜靜地躺著左冬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纸型。 梳的紋絲不亂的頭發(fā)上拇砰,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音狰腌,去河邊找鬼除破。 笑死,一個(gè)胖子當(dāng)著我的面吹牛琼腔,可吹牛的內(nèi)容都是我干的瑰枫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼丹莲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼光坝!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起甥材,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤盯另,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后洲赵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸳惯,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年叠萍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芝发。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苛谷,死狀恐怖后德,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情抄腔,我是刑警寧澤瓢湃,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站赫蛇,受9級(jí)特大地震影響绵患,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜悟耘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一落蝙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦筏勒、人聲如沸移迫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)厨埋。三九已至,卻和暖如春捐顷,著一層夾襖步出監(jiān)牢的瞬間荡陷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工迅涮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留废赞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓叮姑,卻偏偏與公主長(zhǎng)得像唉地,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子传透,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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