面试题答案
一键面试init
或initWithCoder:
- 调用顺序:最先调用,在创建视图控制器实例时执行。
- 作用:用于初始化视图控制器,为其属性设置初始值等。
init
是普通初始化方法,initWithCoder:
用于从归档中初始化视图控制器(比如在使用Interface Builder创建视图控制器时会用到)。
loadView
- 调用顺序:在视图控制器的视图第一次被访问且视图为
nil
时调用。 - 作用:用于创建视图控制器的视图层次结构。如果通过代码创建视图,通常在这个方法中实例化视图并添加子视图;如果使用Interface Builder,系统会自动从nib文件加载视图。
- 调用顺序:在视图控制器的视图第一次被访问且视图为
viewDidLoad
- 调用顺序:在
loadView
之后调用,且仅调用一次。 - 作用:用于进行视图加载完成后的一些初始化操作,比如设置视图的属性、添加手势识别器、初始化数据等。此方法适合进行一次性的配置工作。
- 调用顺序:在
viewWillAppear:
- 调用顺序:在视图即将添加到窗口并显示之前调用,每次视图将要显示时都会调用,包括首次显示和从后台切换到前台等情况。
- 作用:用于执行一些与视图显示相关的准备工作,例如更新视图的布局、根据数据刷新UI等。
viewDidAppear:
- 调用顺序:在视图已经添加到窗口并显示之后调用,每次视图显示后都会调用。
- 作用:可以用于执行一些需要在视图显示后立即执行的操作,比如启动动画、开始监听某些事件等。
viewWillDisappear:
- 调用顺序:在视图即将从窗口移除并消失之前调用,每次视图将要消失时都会调用,例如视图控制器被推出导航栈、切换到其他视图控制器等情况。
- 作用:用于执行一些与视图消失相关的清理工作,比如停止动画、移除监听等。
viewDidDisappear:
- 调用顺序:在视图已经从窗口移除并消失之后调用,每次视图消失后都会调用。
- 作用:可以用于执行一些需要在视图消失后立即执行的操作,比如释放一些资源等。
dealloc
- 调用顺序:在视图控制器实例即将被销毁时调用。
- 作用:用于释放视图控制器占用的资源,比如取消网络请求、释放持有的对象等。需要注意的是,在ARC环境下,大部分对象的内存管理由系统自动完成,但对于一些非ARC管理的资源(如Core Foundation对象等)仍需要手动释放。