iOS-控制器View的創(chuàng)建和生命周期

1. 控制器View的創(chuàng)建

首先我們來(lái)看一下控制器view創(chuàng)建的流程圖


控制器view加載.jpeg

從圖中我們可以看出张抄,在控制器view加載過(guò)程中有兩個(gè)重要的方法loadView和viewDidLoad司浪。下面我們來(lái)重點(diǎn)了解一下這兩個(gè)方法荧关。

loadView方法
作用:loadView方法是用來(lái)負(fù)責(zé)創(chuàng)建UIViewController的view举户。首先判斷下有沒(méi)有指定storyboard或者xib,如果指定,就會(huì)加載它們描述的控制器的view,如果沒(méi)有指定,創(chuàng)建一個(gè)空的view蔼紧。
什么時(shí)候調(diào)用:每次訪問(wèn)UIViewController的view婆硬,當(dāng)view為nil,就會(huì)調(diào)用loadView方法奸例。

viewDidLoad
作用:一般我們會(huì)在這里做界面上的初始化操作彬犯,比如往view中添加一些子視圖等。
什么時(shí)候調(diào)用:每當(dāng)view創(chuàng)建完畢的時(shí)候查吊,最終都會(huì)調(diào)用viewDidLoad方法谐区。

其次,在view創(chuàng)建過(guò)程中還有一些需要注意的地方菩貌。

  1. 通過(guò)storyboard創(chuàng)建的控制器,或者通過(guò)xib創(chuàng)建的控制器的view重荠,系統(tǒng)會(huì)幫我們加載控制器的view箭阶,具體內(nèi)部實(shí)現(xiàn)可以看iOS-UIWindow詳解,在此不在贅述
  1. ViewController *vc = [[ViewController alloc]init];
    底層也會(huì)調(diào)用-(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil方法戈鲁。
    (1).判斷下有沒(méi)有指定nibName,如果指定了,就會(huì)去加載指定的xib
    (2).如果沒(méi)有指定,就會(huì)判斷下有沒(méi)有跟控制器類名同名的xib,有,就會(huì)去加載
    (3).判斷下有沒(méi)有跟控制器類名同名的xib,但是后綴不帶Controller的xib,如果有,就會(huì)去加載
    (4).如果沒(méi)有任何xib描述控制器的view,就不會(huì)加載xib仇参。會(huì)創(chuàng)建一個(gè)顏色為clearColor的view。

2. 控制器View的生命周期

控制器View的生命周期方法

loadView: 加載view
viewDidLoad: view加載完畢
viewWillAppear: 控制器的view將要顯示
viewWillLayoutSubviews: 控制器的view將要布局子控件
viewDidLayoutSubviews: 控制器的view布局子控件完成
viewDidAppear: 控制器的view完全顯示
viewWillDisappear: 控制器的view即將消失的時(shí)候
viewDidDisappear: 控制器的view完全消失的時(shí)候

view生命周期方法調(diào)用順序

viewDidLoad -> viewWillAppear -> viewWillLayoutSubviews -> viewDidLayoutSubviews -> viewDidAppear -> viewWillDisappear -> viewDidDisappear

3. 控制器View的延遲加載

控制器的view是延遲加載的:創(chuàng)建控制器并不一定會(huì)創(chuàng)建控制器的view婆殿,等用到時(shí)再加載
下面我們通過(guò)一個(gè)小的程序來(lái)驗(yàn)證一下
AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    // 創(chuàng)建控制器,并一定會(huì)創(chuàng)建控制器的view
    ViewController *vc = [[ViewController alloc] init];
    
    vc.view.backgroundColor = [UIColor redColor];
    
    self.window.rootViewController = vc;
    
    [self.window makeKeyAndVisible];
    
    return YES;
}```

ViewController.m

import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

// 自定義控制器的view

  • (void)loadView
    {
    NSLog(@"%s",func);
    UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    view.backgroundColor = [UIColor greenColor];
    self.view = view;
    }
    // 控制器的view加載完成的時(shí)候調(diào)用
  • (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.view.backgroundColor = [UIColor blueColor];
    NSLog(@"%s",func);
    }```

此時(shí)打印我們發(fā)現(xiàn)控制器的view顏色是紅色的诈乒,這是因?yàn)関iew的get方法底層中實(shí)現(xiàn)了loadView 和 viewDidLoad方法,loadView中將view設(shè)置為綠色婆芦,viewDidLoad方法中又將view設(shè)置成藍(lán)色怕磨,但是最后被vc.view.backgroundColor = [UIColor redColor];設(shè)置為紅色喂饥。

?本文借鑒了很多前輩的文章,如果有不對(duì)的地方請(qǐng)指正肠鲫,歡迎大家一起交流學(xué)習(xí) xx_cc 员帮。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市导饲,隨后出現(xiàn)的幾起案子捞高,更是在濱河造成了極大的恐慌,老刑警劉巖渣锦,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硝岗,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡袋毙,警方通過(guò)查閱死者的電腦和手機(jī)型檀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)娄猫,“玉大人贱除,你說(shuō)我怎么就攤上這事∠蹦纾” “怎么了月幌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)悬蔽。 經(jīng)常有香客問(wèn)我扯躺,道長(zhǎng),這世上最難降的妖魔是什么蝎困? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任录语,我火速辦了婚禮,結(jié)果婚禮上禾乘,老公的妹妹穿的比我還像新娘澎埠。我一直安慰自己,他們只是感情好始藕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布蒲稳。 她就那樣靜靜地躺著,像睡著了一般伍派。 火紅的嫁衣襯著肌膚如雪江耀。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,208評(píng)論 1 299
  • 那天诉植,我揣著相機(jī)與錄音祥国,去河邊找鬼。 笑死晾腔,一個(gè)胖子當(dāng)著我的面吹牛舌稀,可吹牛的內(nèi)容都是我干的啊犬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼扩借,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼椒惨!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起潮罪,我...
    開(kāi)封第一講書(shū)人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤康谆,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后嫉到,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體沃暗,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年何恶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了孽锥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡细层,死狀恐怖惜辑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情疫赎,我是刑警寧澤盛撑,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站捧搞,受9級(jí)特大地震影響抵卫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜胎撇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一介粘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晚树,春花似錦姻采、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至纲堵,卻和暖如春巡雨,著一層夾襖步出監(jiān)牢的瞬間闰渔,已是汗流浹背席函。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冈涧,地道東北人茂附。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓正蛙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親营曼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乒验,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

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