- 對(duì)于剛開始學(xué)習(xí)iOS的同學(xué)來說,這么多的加載方法看的暈頭轉(zhuǎn)向,我這個(gè)又是強(qiáng)迫癥,整不明白渾身難受.
- 常用的加載方法大概有這么幾個(gè)
1.initWithNibName:bundle: (加載帶有XIB控制器)
2.loadView (控制器的View為空的時(shí)候調(diào)用,幫控制器加載View)
3.initWithCoder: (是當(dāng)從nib文件中加載對(duì)象的時(shí)候會(huì)調(diào)用)
4.awakeFromNib (當(dāng).nib文件被加載的時(shí)候腺办,會(huì)發(fā)送一個(gè)awakeFromNib的消息到.nib文件中的每個(gè)對(duì)象)
5.initWithFrame: (代碼創(chuàng)建View時(shí)調(diào)用,是懶加載,只有到需要顯示時(shí),子控件才不是 nil)
1.讓我們先從ViewController的加載說起
-
Code方式加載ViewController調(diào)用的相關(guān)方法:
代碼創(chuàng)建的ViewController:
ViewControllerWith *vc = [[ViewControllerWith alloc]init];
在這個(gè)加載過程中 相關(guān)方法調(diào)用順序是:
init
initWithNibName:bundle:
loadView
viewDidLoad
-
XIB的方式加載ViewController調(diào)用的相關(guān)方法
當(dāng)command+N創(chuàng)建ViewController的時(shí)候勾選了Also create XIB file ,系統(tǒng)就會(huì)幫我們創(chuàng)建與ViewController同名的XIB文件
對(duì)于這種控制器,常用的創(chuàng)建方式是:
ViewControllerWithXib *vc = [[ViewControllerWithXib alloc]initWithNibName:@"ViewControllerWithXib" bundle:nil];
在這個(gè)加載過程中 相關(guān)方法調(diào)用順序是:
initWithNibName:bundle:
loadView
viewDidLoad
當(dāng)然, 你也可以以下這種方式創(chuàng)建帶有XIB的ViewController
ViewControllerWithXib *vc = [[ViewControllerWithXib alloc]init];
這樣也能加載出你在xib里面創(chuàng)建的view
前提是你的控制器不能重寫loadView方法
因?yàn)橛眠@種方式創(chuàng)建 系統(tǒng)會(huì)調(diào)用loadVIew幫你尋找和類同名的XIB文件加載
你若是重寫了loadVIew,那么控制器就是漆黑一片
這種方式和代碼創(chuàng)建方式時(shí)睡扬,函數(shù)調(diào)用順序一致
-
StoryBoard中加載ViewController調(diào)用的相關(guān)方法
在StoryBoard中構(gòu)建好自己的控制器用以下代碼初始化:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"storyboard" bundle:[NSBundle mainBundle]];//這里的bundle 寫nil也可以代表是mainBundle
MyViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];
在這個(gè)加載過程中 相關(guān)方法調(diào)用順序是:
initWithCoder:
awakeFromNib
loadView(這個(gè)方法結(jié)束時(shí) 控制器的View的子控件才創(chuàng)建)
viewDidLoad
2.然后是View的加載
-
Code的方式加載View調(diào)用的相關(guān)方法
View加載的純代碼的方式:
MyView *view = [[MyView alloc]init];
view加贊完畢的時(shí)候
在這個(gè)加載過程中 相關(guān)方法調(diào)用順序是:
init
initWithFrame:
是init調(diào)用了initWithFrame:
-
XIB的方式加載View調(diào)用的相關(guān)方法
XIB加載方式:
UIView *view = [[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil]lastObject];
解析一個(gè)文件的時(shí)候調(diào)用(只是創(chuàng)建了view)
在這個(gè)加載過程中 相關(guān)方法調(diào)用順序是:
initWithCoder:(這個(gè)時(shí)候子控件沒有被創(chuàng)建)
awakeFromNib(這個(gè)時(shí)候子控件創(chuàng)建完畢, 一般會(huì)在這里進(jìn)一步對(duì)View進(jìn)行初始化)
感謝閱讀
你的支持是我寫作的唯一動(dòng)力