iOS中的各種加載方法(initWithNibName,loadNibNamed,initWithCoder,awakeFromNib等等)簡單使用

iOS中的各種加載方法(initWithNibName,loadNibNamed,initWithCoder,awakeFromNib等等)簡單使用

?

王技術?關注

?1.5?2016.09.06 16:10*?字數 712?閱讀 12403評論 8喜歡 52

對于剛開始學習iOS的同學來說,這么多的加載方法看的暈頭轉向,我這個又是強迫癥,整不明白渾身難受.

常用的加載方法大概有這么幾個

1.initWithNibName:bundle: (加載帶有XIB控制器)

2.loadView (控制器的View為空的時候調用,幫控制器加載View)

3.initWithCoder: (是當從nib文件中加載對象的時候會調用)

4.awakeFromNib (當.nib文件被加載的時候,會發送一個awakeFromNib的消息到.nib文件中的每個對象)

5.initWithFrame: (代碼創建View時調用,是懶加載,只有到需要顯示時,子控件才不是 nil)

1.讓我們先從ViewController的加載說起

Code方式加載ViewController調用的相關方法:

代碼創建的ViewController:

ViewControllerWith *vc = [[ViewControllerWith alloc]init];

在這個加載過程中 相關方法調用順序是:

init

initWithNibName:bundle:

loadView

viewDidLoad

XIB的方式加載ViewController調用的相關方法

當command+N創建ViewController的時候勾選了Also create XIB file ,系統就會幫我們創建與ViewController同名的XIB文件

對于這種控制器,常用的創建方式是:

ViewControllerWithXib *vc = [[ViewControllerWithXib alloc]initWithNibName:@"ViewControllerWithXib"bundle:nil];

在這個加載過程中 相關方法調用順序是:

initWithNibName:bundle:

loadView

viewDidLoad

當然, 你也可以以下這種方式創建帶有XIB的ViewController

ViewControllerWithXib *vc = [[ViewControllerWithXib alloc]init];

這樣也能加載出你在xib里面創建的view

前提是你的控制器不能重寫loadView方法

因為用這種方式創建 系統會調用loadVIew幫你尋找和類同名的XIB文件加載

你若是重寫了loadVIew,那么控制器就是漆黑一片

這種方式和代碼創建方式時,函數調用順序一致

StoryBoard中加載ViewController調用的相關方法

在StoryBoard中構建好自己的控制器用以下代碼初始化:

UIStoryboard*storyboard = [UIStoryboardstoryboardWithName:@"storyboard"bundle:[NSBundlemainBundle]];//這里的bundle 寫nil也可以代表是mainBundleMyViewController *vc = [self.storyboard? instantiateViewControllerWithIdentifier:@"MyViewController"];

在這個加載過程中 相關方法調用順序是:

initWithCoder:

awakeFromNib

loadView(這個方法結束時 控制器的View的子控件才創建)

viewDidLoad

2.然后是View的加載

Code的方式加載View調用的相關方法

View加載的純代碼的方式:

MyView *view = [[MyView alloc]init];

view加贊完畢的時候

在這個加載過程中 相關方法調用順序是:

init

initWithFrame:

是init調用了initWithFrame:

XIB的方式加載View調用的相關方法

XIB加載方式:

UIView*view = [[[NSBundlemainBundle] loadNibNamed:@"MyView"owner:selfoptions:nil]lastObject];

解析一個文件的時候調用(只是創建了view)

在這個加載過程中 相關方法調用順序是:

initWithCoder:(這個時候子控件沒有被創建)

awakeFromNib(這個時候子控件創建完畢, 一般會在這里進一步對View進行初始化)

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容