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属性