UIViewController的Nib文件的加载过程

init/initWithCoder:(NSCoder *)aDecoder:(如果使用storyboard或者xib)

loadView:加载view

viewDidLoad:view加载完毕

viewWillAppear:控制器的view将要显示

viewWillLayoutSubviews:控制器的view将要布局子控件

viewDidLayoutSubviews:控制器的view布局子控件完成

这期间系统可能会多次调用viewWillLayoutSubviews 、    viewDidLayoutSubviews 俩个方法

在这中间VC的view会调用drawRect 等绘图渲染方法

viewDidAppear:控制器的view完全显示

viewWillDisappear:控制器的view即将消失的时候

这期间系统也会调用viewWillLayoutSubviews 、viewDidLayoutSubviews 两个方法

viewDidDisappear:控制器的view完全消失的时候

1.VC的- (instancetype)initWithNibName:(nullableNSString*)nibNameOrNil bundle:(nullableNSBundle*)nibBundleOrNilNS_DESIGNATED_INITIALIZER; 无论什么方式都会调用。

用VC的init方法会默认调用initWithNibName 方法 参数为nil      此时将nib文件和相关资源加载中内存中,但是数据是序列化(unarchived)的

2. - (instancetype)initWithCoder:(NSCoder *)coder;  从归档初始化,反序列化Nib对象图数据,初始化对象

重建Nib中对象的所有的联系(action、outlet),包括与File’s Owner与其他占位对象的联系

向Nib中相应的对象发送awakeFromNib消息。在iOS中,此消息仅发送给由nib加载代码初始化的对象,File’s Owner、First Responser、任一占位对象都接收不到awakeFromNib消息。

3.loadView  

1> 它会先去查找与UIViewController相关联的xib文件,通过加载xib文件来创建UIViewController的view

如果在初始化UIViewController指定了xib文件名,就会根据传入的xib文件名加载对应的xib文件

[[ViewController alloc] initWithNibName:@"ViewController"bundle:nil];

如果没有明显地传xib文件名,就会加载跟UIViewController同名的xib文件

[[ViewController alloc] init]; // 加载ViewController.xib

2> 如果没有找到相关联的xib文件,就会创建一个空白的UIView,然后赋值给UIViewController的view属性

你可能感兴趣的:(UIViewController的Nib文件的加载过程)