你能给我解释一下管理UIViewController生命周期的正确方式吗?

特别地,我想知道如何使用初始化,ViewDidLoad, ViewWillAppear, ViewDidAppear, ViewWillDisappear, ViewDidDisappear, ViewDidUnload和Dispose方法在UIViewController类的Mono Touch。


当前回答

图中没有提到viewWillLayoutSubviews和viewDidLayoutSubviews方法,但是在viewWillAppear和viewDidAppear之间调用这些方法。它们可以被多次调用。

其他回答

这里有很多过时和不完整的信息。仅适用于iOS 6及更新版本:

(一)未经 viewDidLoad[一] 那些有点 viewWillLayoutSubviews是边界第一次被最终确定 viewDidLayoutSubviews 在viewDidAppear * viewWillLayoutSubviews [b] * viewDidLayoutSubviews [b]


脚注:

(a) -如果在didReceiveMemoryWarning期间手动空出视图,loadView和viewDidLoad将再次被调用。也就是说,默认情况下,loadView和viewDidLoad每个视图控制器实例只被调用一次。

(b)可称为额外0次或更多次。

图中没有提到viewWillLayoutSubviews和viewDidLayoutSubviews方法,但是在viewWillAppear和viewDidAppear之间调用这些方法。它们可以被多次调用。

iOS 10,11 (Swift 3.1,Swift 4.0)

根据UIKit开发者的UIViewController,

1. loadView ()

如果子类没有使用nib,就应该在这里创建自定义视图层次结构。不要直接打电话。

2. loadViewIfNeeded ()

如果视图控制器的视图尚未被设置,则加载视图控制器的视图。

3. 视图加载()

在视图加载后调用。对于在代码中创建的视图控制器,它位于-loadView之后。对于从nib未归档的视图控制器,这是在视图被设置之后。

4. viewWillAppear(_ animated: Bool)

当视图即将变为可见时调用。违约不起任何作用

5. viewWillLayoutSubviews ()

在视图控制器的视图的layoutSubviews方法被调用之前调用。子类可以根据需要实现。违约不起任何作用。

6. 视图布局子视图()

在视图控制器的视图的layoutSubviews方法被调用之后调用。子类可以根据需要实现。违约不起任何作用。

7. viewDidAppear(_ animated: Bool)

当视图完全转换到屏幕上时调用。违约不起任何作用

8. viewWillDisappear(_ animated: Bool)

当视图被解散、覆盖或以其他方式隐藏时调用。违约不起任何作用

9. viewDidDisappear(_ animated: Bool)

在视图被解散,覆盖或以其他方式隐藏后调用。违约不起任何作用

10. viewWillTransition(大小:CGSize,协调器:UIViewControllerTransitionCoordinator)

视图正在转换时调用。

11. willMove(到父视图控制器:UIViewController?)

12. didMove(to arentviewcontroller parent: UIViewController?)

这两个方法是公共的,供容器子类在子控制器之间转换时调用。如果它们被覆盖,覆盖应确保调用超级。

当子对象从父对象中移除时,这两个方法中的父对象参数都为nil;否则它等于新的父视图控制器。

13. didReceiveMemoryWarning ()

当父应用程序接收到内存警告时调用。在iOS 6.0上,默认情况下它将不再清除视图。

iOS 6及以后版本。新的图表如下:

让我们集中在方法上,它们负责UIViewController的生命周期:

Creation: - (void)init - (void)initWithNibName: View creation: - (BOOL)isViewLoaded - (void)loadView - (void)viewDidLoad - (UIView *)initWithFrame:(CGRect)frame - (UIView *)initWithCoder:(NSCoder *)coder Handling of view state changing: - (void)viewDidLoad - (void)viewWillAppear:(BOOL)animated - (void)viewDidAppear:(BOOL)animated - (void)viewWillDisappear:(BOOL)animated - (void)viewDidDisappear:(BOOL)animated - (void)viewDidUnload Memory warning handling: - (void)didReceiveMemoryWarning Deallocation - (void)viewDidUnload - (void)dealloc

更多信息请查看UIViewController类参考。