1.loadView
1)当程序访问了控制器的view属性时,会判断控制器的view是否已经存在,如果已经存在,会直接返回一个已经存在的view。
2)如果不存在,那么就会调用控制器的loadView方法,如果控制器实现了这个方法,就会加载loadView方法中自定义的view。
3)如果没有实现控制器的loadView方法,那么它会先去看一下当前控制器是否从storyboard当中创建的,如果是 就从storyboard当中创建的view。
4)如果不是storyboard,那么它会去看有没有指定nibName的xib,如果有,就从指定名称的xib来描述控制器的view。
5)如果没有指定名称的xib,就会去看有没有跟控制器名称相同的xib,如果有,就用这个xib描述的view。
6)如果没有跟控制器名称相同的xib,那么就会去看有没有跟控制器名称相同去掉controller的xib,如果有,就用这个xib描述的view。
2.前面6步实际都是在做loadView,做完这一步之后,就调用viewDidLoad,只会被调用一次
3.在视图显示之前调用viewWillAppear,该函数可以被多次调用
4.在布局变化前后,调用viewWillLayoutSubviews\viewDidLayoutSubviews
5.视图显示完毕,调用viewDidAppear
6.在视图消失之前,调用viewWillDisApperar,该函数可以被多次调用
7.视图消失完毕,调用viewDidDisAppear。
8.控制器还有三个方法需要注意:viewWillUnload\viewDidUnload\didReceiveMemoryWarning
8.1当程序内存不够用时,最先拿到内存警告的是UIApplication→Window→Window.rootViewController→.....(一层一层往下传).
8.2当控制器收到内存警告时,如果要确定要销毁View,则会调用viewWillUnload/viewDidUnload
9.当控制器的View被销毁之后,如果又需要显示,则控制器会调用loadView,又从第一步的loadView开始走一遍
总结:控制器的生命周期实际是一个闭合的环.