前言
在iOS开发中,UIViewController
扮演者非常重要的角色,它是视图view和数据model的桥梁,通过UIViewController
的管理有条不紊的将数据展示在视图上。作为UIKit
中最基本的一个类,一般复杂的项目都离不开UIViewController
作为基类。所以了解UIViewController
的整个生命周期是有必要的。
生命周期
ViewController
生命周期会经历初始化、加载视图、销毁视图、生命结束等过程。
初始化
init方法:
初始化ViewController
本身。init
里不要出现创建view的代码;在init里应该只有相关数据的初始化,而且这些数据都是比较关键的数据;init
里不要调self.view
,否则会导致ViewController
创建view。(因为view是lazyinit的)
加载视图
loadView方法:
当view需要被展示而它却是nil
时,viewController
会调用该方法。
loadView
中只初始化view;一般用于创建比较关键的view如tableViewController
的tableView
,UINavigationController
的navgationBar
,不可调用view的getter (在调用super 的loadView前),最好也不要初始化一些非关键的view。如果你是从nib文件中创建的viewController
在这里一定要首先调用 super的loadView方法,但建议不要重载这个方法。
viewDidLoad方法:
执行完loadView
后继续执行viewDidLoad
,loadView
时还没有view,而viewDidLoad
时view已经创建好了
viewDidLoad
这时候view已经有了,最适合创建一些附加的view和控件了,有一点需要注意的是,viewDidLoad
可能会调用多次(viewController
可能多次载入view)
viewWillAppear方法:
UIViewController
对象的视图即将加入窗口时调用
- 这个一般在view被添加到
superview
之前;切换动画之前调用,在这里可以进行一些显示前的处理,比如键盘弹出,一些特殊的过程动画;
viewDidApper方法:
UIViewController
对象的视图已经加入到窗口时调用
viewWillDisappear方法:
UIViewController
对象的视图即将消失、被覆盖或是隐藏时调用;
viewDidDisappear方法:
UIViewController
对象的视图已经消失、被覆盖或是隐藏时调用;
viewDidUnload方法:
这时候viewController
的view已经是nil
了,由于这一般发生在内存警告时,所以在这里你应该将那些不在显示的view释放了。比如你在 viewcontroller
的view上加了一个label,而且这个label是viewcontroller
的属性,那么你要把这个属性设置成 nil
,以免占用不必要的内存,而这个label在viewDidLoad
时会重新创建。
在该方法中将所有IBOutl