你能给我解释一下管理UIViewController生命周期的正确方式吗?
特别地,我想知道如何使用初始化,ViewDidLoad, ViewWillAppear, ViewDidAppear, ViewWillDisappear, ViewDidDisappear, ViewDidUnload和Dispose方法在UIViewController类的Mono Touch。
你能给我解释一下管理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类参考。