iOS日常面试题iOS收集

iOS中的各种加载方法(initWithNibName,load

2016-09-06  本文已影响6286人  王技术

1.让我们先从ViewController的加载说起

代码创建的ViewController:

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

在这个加载过程中 相关方法调用顺序是:
init
initWithNibName:bundle:
loadView
viewDidLoad

当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中构建好自己的控制器用以下代码初始化:

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"storyboard" bundle:[NSBundle mainBundle]];//这里的bundle 写nil也可以代表是mainBundle
    MyViewController *vc = [self.storyboard  instantiateViewControllerWithIdentifier:@"MyViewController"];

在这个加载过程中 相关方法调用顺序是:
initWithCoder:
awakeFromNib
loadView(这个方法结束时 控制器的View的子控件才创建)
viewDidLoad

2.然后是View的加载

View加载的纯代码的方式:

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

view加赞完毕的时候
在这个加载过程中 相关方法调用顺序是:
init
initWithFrame:
是init调用了initWithFrame:

XIB加载方式:

UIView *view = [[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil]lastObject];

解析一个文件的时候调用(只是创建了view)
在这个加载过程中 相关方法调用顺序是:
initWithCoder:(这个时候子控件没有被创建)
awakeFromNib(这个时候子控件创建完毕, 一般会在这里进一步对View进行初始化)

谢谢阅读
有不合适的地方请指教
喜欢请点个赞
抱拳了!

上一篇 下一篇

猜你喜欢

热点阅读