转载自:http://sunnyyoung.net/post/ios/2015-04-22-viewcontrollerde-qi-dong-liu-cheng-yu-jie-xi
VIEWCONTROLLER的启动流程与解析
ViewController的启动流程:
init/initWithCoder -> awakeFromNib -> loadView -> viewDidLoad -> viewWillApear -> viewDidApear
init
用代码创建的View或者ViewController使用这个初始方法
initWithCoder
使用IB创建的View或者ViewController使用这个初始方法
loadView
loadView是ViewController中的一个方法,而且没有必要就永远不能主动调用这个函数。
因为ViewController会在view Property
(The view that the controller manages.)被请求且view
的值为nil
的时候调用这个函数。
如果是使用IB创建view并初始化ViewController则应该使用init withNibName: bundle:
方法,而且不应该重载loadView函数。
如果是使用如果代码手动创建该ViewController中的view
则应该重载这个函数,而且不必调用[super loadView]
。
awakeFromNib
当.nib文件被加载的时候,会发送一个awakeFromNib的消息到.nib文件中的每个对象,每个对象都可以定义自己的awakeFromNib函数来响应这个消息,执行一些必要的操作。也就是说通过nib文件创建view对象是执行awakeFromNib。
如果通过代码手动创建该viewController则不执行awakeFromNib
viewDidLoad
在viewController加载了相关的view之后被调用,且viewDidLoad无论通过什么途径加载(实例化)都会执行这个方法。
awakeFromNib和loadView都是在viewDidLoad之前执行的。
如有错误或不足请指正