UIViewController的初始化
UIViewController的初始化一般有两个:
-(instancetype)init;
-(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;
而init会调用initWithNibName:bundle:,因此基本上只使用后者作为初始化入口。
这两个初始化作用一般仅用于一些数据的初始化,而不涉及到视图的初始化,因此正常情况下,调用完初始化方法后,self.view还是nil.
仅在第一次以获取的方式访问self.view时,会触发loadView,如果子类实现了loadView,则通过调用子类loadView来初始化视图;
否则,loadView会查找nib文件(根据之前初始化时传入的nib文件名或者使用默认nib文件名)并加载;如果查找失败,loadView会创建一个空的View对象。
loadView结束后会调用viewDidLoad,但是不保证当前self.view非空(可能用户实现loadView时忘记对self.view赋值)。