UIViewController之生命周期

前言:

做開發(fā)有一段時間了益老,基本想實現(xiàn)的功能都有辦法解決(谷歌百度...各種查)彪蓬,可是前段時間和一技術(shù)好友聊天來著,問了我一個問題捺萌,現(xiàn)在想想都尷尬档冬,“你知道UIViewController的生命周期嗎?”桃纯,我的回答“不就是有好多方法會根據(jù)控制器不同階段去調(diào)用這些方法”酷誓,他接住說“就這些?”态坦,我疑惑的問“不就是這些東西嗎盐数?難不成還有?”驮配,“前段時間我面試了技術(shù)娘扩,類似于你就這樣回答,我立馬做出pass他的準備”壮锻,“是嗎琐旁?”。后來細細回想起自己的答案猜绣,突然意識到白做開發(fā)這么多年了灰殴,只是掌握了快速開發(fā),也就意味著只了解開發(fā)的皮毛掰邢,而不知開發(fā)的骨頭長什么樣子牺陶,對于一個開發(fā)人員而言這個信號真的很危險,最直接1.面試;2.程序的優(yōu)化以及擴展辣之;掰伸,所以最近如果有時間就去剖析技術(shù)的深層理解,為了不讓自己如此low怀估。抒情的文字到此打住狮鸭,開始我們今天的正事。

流程圖:
  • 生命周期包含的方法:
1 + (void)initialize;
2 - (instancetype)init; 
3 - (void)loadView;
4 - (void)viewDidLoad;
5 -(void)viewWillLayoutSubviews;
6 -(void)viewDidLayoutSubviews;
7 - (void)viewWillAppear:(BOOL)animated;
8 - (void)viewDidAppear:(BOOL)animated
9 - (void)viewWillDisAppear:(BOOL)animated;
10 - (void)viewDidDisAppear:(BOOL)animated;
11 - (void)dealloc;
12 - (void)didReceiveMemoryWarning;
  • 方法執(zhí)行順序:

測試方法:每個方法中進行方法名打印多搀,根據(jù)控制臺打印順序確定執(zhí)行順序歧蕉。
準備:兩個控制器A,B,在A控制器中點擊跳轉(zhuǎn)到B控制器康铭,跳轉(zhuǎn)是通過push方法惯退。
測試代碼:

+ (void)initialize
{
    NSLog(@"initialize");
}

- (instancetype)init
{
    if (self = [super init]) {
        NSLog(@"init");
    }
    return self;
}

- (void)loadView
{
    [super loadView];
    NSLog(@"loadView");
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"viewDidLoad");
}

- (void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];
    NSLog(@"viewWillLayoutSubviews");
}

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    NSLog(@"viewDidLayoutSubviews");
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    NSLog(@"viewDidAppear");
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    NSLog(@"viewWillAppear");
}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
    NSLog(@"viewDidDisappear");
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    NSLog(@"viewWillDisappear");
}

- (void)dealloc
{
    NSLog(@"dealloc");
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
     NSLog(@"didReceiveMemoryWarning");
}

測試結(jié)果:

2016-06-27 13:28:24.075 ****循環(huán)輪播器****[2049:88990] initialize
2016-06-27 13:28:24.075 ****循環(huán)輪播器****[2049:88990] init
2016-06-27 13:28:24.116 ****循環(huán)輪播器****[2049:88990] loadView
2016-06-27 13:28:24.116 ****循環(huán)輪播器****[2049:88990] viewDidLoad
2016-06-27 13:28:24.116 ****循環(huán)輪播器****[2049:88990] viewWillAppear
2016-06-27 13:28:24.122 ****循環(huán)輪播器****[2049:88990] viewWillLayoutSubviews
2016-06-27 13:28:24.122 ****循環(huán)輪播器****[2049:88990] viewDidLayoutSubviews
2016-06-27 13:28:24.625 ****循環(huán)輪播器****[2049:88990] viewDidAppear
2016-06-27 13:28:31.260 ****循環(huán)輪播器****[2049:88990] viewWillDisappear
2016-06-27 13:28:31.762 ****循環(huán)輪播器****[2049:88990] viewDidDisappear
2016-06-27 13:28:31.763 ****循環(huán)輪播器****[2049:88990] dealloc

結(jié)論:測試結(jié)果已經(jīng)幫我們確定了每個方法的執(zhí)行順序,可能有細心的人已經(jīng)發(fā)現(xiàn)从藤,測試結(jié)果中少了一個方法的執(zhí)行催跪,- (void)didReceiveMemoryWarning锁蠕,原因很簡單,我們沒有觸發(fā)這個方法叠荠。

  • 方法都干什么事:
+ (void)initialize;        //類的初始化方法

- (instancetype)init;      //對象初始化方法

-(void)loadView; //發(fā)信息調(diào)起加載視圖動作匿沛,視圖不顯示。

-(void)loadView; // 只有self.view = nil就會調(diào)用該方法榛鼎,如果控制器存在self.view被銷毀逃呼,系統(tǒng)會立刻調(diào)用loadView創(chuàng)建新的View。

- (void)viewDidLoad; //開始創(chuàng)建視圖對象者娱,視圖不顯示抡笼。

- (void)viewDidLoad // viewDidLoad主要做初始化使用,比如視圖中添加子視圖黄鳍,網(wǎng)絡(luò)數(shù)據(jù)加載等操作推姻。

-(void)viewWillAppear:(BOOL)animated;   //視圖對象已經(jīng)創(chuàng)建就緒,視圖不顯示框沟。

-(void)viewWillLayoutSubviews;          // 處理父視圖中的子視圖藏古。

-(void)viewDidLayoutSubviews;           // 子視圖部署完成。

-(void)viewDidAppear:(BOOL)animated;    //視圖開始顯示在屏幕忍燥。

-(void)viewWillDisappear:(BOOL)animated;         // 視圖顯示的最后一刻拧晕。

-(void)viewDidDisappear:(BOOL)animated;          //視圖完全消失。

-(void)dealloc;                                  // 如果沒有強引用梅垄,視圖對象便會被銷毀厂捞。

- (void)didReceiveMemoryWarning;                 // 此刻該應用程序的內(nèi)存即將超過系統(tǒng)所給內(nèi)存最大值時,調(diào)用队丝。
總結(jié):

通過以上文字描述靡馁,我們知道了控制器生命周期中都執(zhí)行了那些方法,也知道他們的執(zhí)行順序机久,也了解了每個方法在不同階段執(zhí)行臭墨,可能會有遺漏,歡迎您的指正膘盖。讓開發(fā)變不在那么撲朔迷離不再那么的神秘裙犹,我可以多做一點,如果有興趣可以加群進行更多討論衔憨,群號:126440594

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末袄膏,一起剝皮案震驚了整個濱河市践图,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沉馆,老刑警劉巖码党,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件德崭,死亡現(xiàn)場離奇詭異,居然都是意外死亡揖盘,警方通過查閱死者的電腦和手機眉厨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兽狭,“玉大人憾股,你說我怎么就攤上這事』郏” “怎么了服球?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長颠焦。 經(jīng)常有香客問我斩熊,道長,這世上最難降的妖魔是什么伐庭? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任粉渠,我火速辦了婚禮蛋济,結(jié)果婚禮上啊楚,老公的妹妹穿的比我還像新娘。我一直安慰自己希停,他們只是感情好盯捌,可當我...
    茶點故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布淳衙。 她就那樣靜靜地躺著,像睡著了一般饺著。 火紅的嫁衣襯著肌膚如雪箫攀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天幼衰,我揣著相機與錄音靴跛,去河邊找鬼。 笑死渡嚣,一個胖子當著我的面吹牛梢睛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播识椰,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼绝葡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了腹鹉?” 一聲冷哼從身側(cè)響起藏畅,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎功咒,沒想到半個月后愉阎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绞蹦,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年榜旦,在試婚紗的時候發(fā)現(xiàn)自己被綠了幽七。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡溅呢,死狀恐怖澡屡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情藕届,我是刑警寧澤挪蹭,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站休偶,受9級特大地震影響梁厉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜踏兜,卻給世界環(huán)境...
    茶點故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一词顾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碱妆,春花似錦肉盹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至纳本,卻和暖如春窍蓝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背繁成。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工吓笙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人巾腕。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓面睛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親尊搬。 傳聞我的和親對象是個殘疾皇子叁鉴,可洞房花燭夜當晚...
    茶點故事閱讀 43,566評論 2 349

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