面试题答案
一键面试init
或initWithCoder:
- 调用顺序:最先调用,用于初始化视图控制器实例。
- 主要任务:分配内存并初始化视图控制器的属性。如果是从nib文件加载,会调用
initWithCoder:
;如果手动创建,调用init
。
loadView
- 调用顺序:在
init
之后,viewDidLoad
之前调用。 - 主要任务:创建视图控制器的视图层次结构。可以通过代码创建视图,也可以从nib文件加载视图。如果视图控制器是从storyboard加载,系统会自动处理此步骤。
- 调用顺序:在
viewDidLoad
- 调用顺序:在
loadView
之后调用。 - 主要任务:进行视图的初始配置,例如添加子视图、设置视图属性、初始化数据模型等一次性的设置工作。
- 调用顺序:在
viewWillAppear:
- 调用顺序:在视图即将显示到屏幕之前调用,每次视图将要显示时都会调用。
- 主要任务:准备视图显示,例如注册通知、调整视图布局以适应方向变化等。此方法中不适合进行大量的计算工作,因为它会在每次视图出现时调用。
viewDidAppear:
- 调用顺序:在视图已经显示到屏幕之后调用,每次视图显示后都会调用。
- 主要任务:执行需要在视图显示后立即执行的操作,如开始动画、启动定时器等。
viewWillDisappear:
- 调用顺序:在视图即将从屏幕上移除之前调用,每次视图将要消失时都会调用。
- 主要任务:清理与视图相关的资源,例如取消网络请求、移除通知观察者、停止定时器等。
viewDidDisappear:
- 调用顺序:在视图已经从屏幕上移除之后调用,每次视图消失后都会调用。
- 主要任务:可以在这里进行一些最后的清理工作,但此时视图已经从窗口移除,不适合进行与视图相关的操作。
dealloc
- 调用顺序:当视图控制器被释放时调用。
- 主要任务:释放视图控制器持有的所有资源,例如释放内存、关闭文件句柄等。确保在对象销毁前清理所有引用,避免内存泄漏。