前言
在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时会重新创建。
在该方法中将所有IBOutlet(无论是property还是实例变量)置为nil(系统release view时已经将其release掉了)。
在该方法中释放其他与view有关的对象、其他在运行时创建(但非系统必须)的对象、在viewDidLoad中被创建的对象、缓存数据等。
一般认为viewDidUnload

本文详细介绍了iOS中UIViewController的生命周期,包括初始化、加载视图、销毁视图的各个阶段,以及相应的注意事项和代码示例。理解这些生命周期对于有效管理视图控制器的资源和状态至关重要。在内存紧张时,系统可能会调用viewDidUnload,释放非关键视图资源。在实际开发中,应避免viewDidLoad被多次调用,确保视图控制器的正确加载和释放。
最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



