跳到主要内容

ViewController 的 loadView, viewDidLoad, viewDidUnload 分别是在什么时候调用的?

参考答案:

UIViewController 是 iOS 应用程序中用于管理视图层次结构的主要类。loadViewviewDidLoadviewDidUnloadUIViewController 生命周期中的几个重要方法,用于在不同阶段执行特定的任务。以下是这些方法在何时被调用的简要说明:

  1. loadView

    • 调用时机:当视图控制器需要其视图时,并且该视图尚未创建时,会自动调用此方法。通常,如果你使用 Interface Builder 来创建和布局视图,那么这个方法不需要你重写。但是,如果你打算完全通过代码来创建视图,那么你需要重写这个方法。
    • 用途:在此方法中,你应该创建视图控制器的根视图,并将其赋值给 view 属性。
  2. viewDidLoad

    • 调用时机:在视图控制器的视图加载到内存后,紧接着 loadView 方法之后调用。此时,视图层次结构已经加载到内存中,但尚未显示到屏幕上。
    • 用途:这是执行初始化设置和配置视图层次结构的绝佳时机。例如,你可以在这里添加子视图、设置约束、配置数据源等。
  3. viewDidUnload

    • 调用时机:在 iOS 6 及更早版本中,当视图控制器的视图从内存中卸载时(通常是由于内存警告),会自动调用此方法。但在 iOS 6 之后,这个方法已经废弃,因为视图控制器现在使用自动释放池来管理其视图的内存。
    • 用途:在 iOS 6 及更早版本中,你可以在这里释放与视图相关的任何强引用,以响应内存警告。但在现代 iOS 开发中,由于自动引用计数(ARC)和自动释放池的存在,你通常不需要关心这个方法。

需要注意的是,从 iOS 6 开始,由于引入了自动释放池,视图控制器的视图在不再需要时会自动释放,因此 viewDidUnload 方法已经不被使用。相反,你应该在 didReceiveMemoryWarning 方法中处理内存警告,并适当释放不再需要的资源。

最后,随着 iOS 的发展,视图控制器的生命周期方法可能会有所变化或添加新的方法。因此,建议查阅最新的 Apple 官方文档以获取最准确的信息。