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

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


当前回答

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

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


脚注:

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

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

其他回答

让我们集中在方法上,它们负责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类参考。

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

更新:ViewDidUnload在iOS 6中已弃用,因此更新了相应的答案。

UIViewController的生命周期如图所示:

使用Xamarin Native/Mono Touch的优势在于,它使用了原生api,因此它遵循与Apple文档中相同的ViewController生命周期。

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

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

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


脚注:

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

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