UIViewController的完整生命周期
参考答案:
UIViewController
是 iOS 开发中非常核心的一个类,它负责管理应用程序的用户界面部分。了解其完整的生命周期对于有效地创建和维护视图控制器至关重要。以下是 UIViewController
的主要生命周期方法和事件:
-
初始化:
init(nibName:bundle:)
或init(coder:)
:当从 XIB 或 Storyboard 实例化视图控制器时调用。- 自定义初始化方法:如果你需要自定义初始化逻辑,可以添加自己的初始化方法。
-
加载视图:
loadView()
:当视图控制器的视图第一次被请求时调用(如果还没有创建)。通常在这个方法中,你会创建或加载你的主视图。viewDidLoad()
:在视图加载完成后调用,此时视图已经创建并初始化,但尚未添加到视图层次结构中。这是进行一次性设置操作(如设置初始状态、添加子视图等)的好地方。
-
视图即将显示:
viewWillAppear(_:)
:在视图即将添加到视图层次结构之前调用。这通常用于执行任何需要在视图变为可见之前进行的准备操作。
-
视图已显示:
viewDidAppear(_:)
:在视图已经添加到视图层次结构并且完全可见后调用。这通常用于执行动画或其他需要视图完全可见的操作。
-
视图即将消失:
viewWillDisappear(_:)
:在视图即将从视图层次结构中移除之前调用。这通常用于执行任何需要在视图消失之前进行的清理操作。
-
视图已消失:
viewDidDisappear(_:)
:在视图已经从视图层次结构中移除并且不再可见后调用。
-
内存管理:
didReceiveMemoryWarning()
:当系统内存较低时调用。视图控制器应在此方法中释放任何不必要的资源,以减轻系统的内存压力。
-
其他生命周期事件:
viewWillLayoutSubviews()
和viewDidLayoutSubviews()
:在视图控制器的视图或其子视图的布局将要或已经发生更改时调用。这通常用于调整子视图的布局或约束。willMove(toParent:)
和didMove(toParent:)
:当视图控制器即将或已经移动到新的父视图控制器时调用。prepare(for:sender:)
:在即将执行 segue 之前调用,用于准备目标视图控制器。
-
清理:
deinit
:当视图控制器对象即将被释放时调用。这是释放任何强引用或执行其他清理任务的最后机会。
了解并正确使用这些生命周期方法可以帮助你更有效地管理你的视图控制器,确保它们在应用程序的不同状态下保持正确的状态和行为。