ViewController 的 loadView, viewDidLoad, viewDidUnload 分别是在什么时候调用的?
参考答案:
UIViewController
是 iOS 应用程序中用于管理视图层次结构的主要类。loadView
、viewDidLoad
和 viewDidUnload
是 UIViewController
生命周期中的几个重要方法,用于在不同阶段执行特定的任务。以下是这些方法在何时被调用的简要说明:
-
loadView:
- 调用时机:当视图控制器需要其视图时,并且该视图尚未创建时,会自动调用此方法。通常,如果你使用 Interface Builder 来创建和布局视图,那么这个方法不需要你重写。但是,如果你打算完全通过代码来创建视图,那么你需要重写这个方法。
- 用途:在此方法中,你应该创建视图控制器的根视图,并将其赋值给
view
属性。
-
viewDidLoad:
- 调用时机:在视图控制器的视图加载到内存后,紧接着
loadView
方法之后调用。此时,视图层次结构已经加载到内存中,但尚未显示到屏幕上。 - 用途:这是执行初始化设置和配置视图层次结构的绝佳时机。例如,你可以在这里添加子视图、设置约束、配置数据源等。
- 调用时机:在视图控制器的视图加载到内存后,紧接着
-
viewDidUnload:
- 调用时机:在 iOS 6 及更早版本中,当视图控制器的视图从内存中卸载时(通常是由于内存警告),会自动调用此方法。但在 iOS 6 之后,这个方法已经废弃,因为视图控制器现在使用自动释放池来管理其视图的内存。
- 用途:在 iOS 6 及更早版本中,你可以在这里释放与视图相关的任何强引用,以响应内存警告。但在现代 iOS 开发中,由于自动引用计数(ARC)和自动释放池的存在,你通常不需要关心这个方法。
需要注意的是,从 iOS 6 开始,由于引入了自动释放池,视图控制器的视图在不再需要时会自动释放,因此 viewDidUnload
方法已经不被使用。相反,你应该在 didReceiveMemoryWarning
方法中处理内存警告,并适当释放不再需要的资源。
最后,随着 iOS 的发展,视图控制器的生命周期方法可能会有所变化或添加新的方法。因此,建议查阅最新的 Apple 官方文档以获取最准确的信息。