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进行初始化)

你可能感兴趣的:(iOS中的各种加载方法(initWithNibName,loadNibNamed,initWithCoder,awakeFromNib等等)简单使用)