iOS开发 oc viewcontroller生命周期

158 阅读2分钟

在iOS开发中,UIViewController的生命周期是管理视图控制器的重要部分,其生命周期方法分为几个主要阶段:初始化、加载视图、显示视图、隐藏视图以及销毁。以下是详细的生命周期流程:

1. 初始化阶段

  • initWithFrame::通过框架初始化视图控制器。
  • initWithCoder::通过XIB或Storyboard初始化视图控制器。
  • awakeFromNib:当从XIB加载时调用,用于设置 outlets 和 actions。

2. 加载视图阶段

  • loadView:创建或加载视图控制器的视图。通常在代码中重写此方法来创建自定义视图。
  • viewDidLoad:视图加载完成后调用,适合进行MVC设置和初始化操作。此方法只调用一次,通常用于设置模型数据和布局。

3. 显示视图阶段

  • viewWillAppear::视图即将显示时调用,适合进行动画准备和数据加载。
  • viewWillLayoutSubviews:视图即将布局子视图时调用,适合调整子视图的布局。
  • viewDidLayoutSubviews:视图布局完成后调用,适合进行布局相关的调整。
  • viewDidAppear::视图完全显示后调用,适合进行动画执行和用户交互的初始化。

4. 隐藏视图阶段

  • viewWillDisappear::视图即将隐藏时调用,适合进行清理操作。
  • viewDidDisappear::视图完全隐藏后调用,适合进行资源释放。

5. 销毁阶段

  • dealloc:视图控制器被销毁前调用,适合进行资源释放和清理。

生命周期顺序

根据证据,完整的生命周期顺序如下:

  1. initWithFrame: 或 initWithCoder:
  2. awakeFromNib
  3. loadView
  4. viewDidLoad
  5. viewWillAppear:
  6. viewWillLayoutSubviews
  7. viewDidLayoutSubviews
  8. viewDidAppear:
  9. viewWillDisappear:
  10. viewDidDisappear:
  11. dealloc

注意事项

  1. ARC环境下的生命周期:在自动引用计数(ARC)环境下,生命周期方法的调用顺序与非ARC环境一致。
  2. 非ARC环境下的生命周期:在非ARC环境下,额外的方法如viewWillUnload和viewDidUnload会在视图从内存中移除时调用。
  3. 内存警告:当系统内存不足时,会调用didReceiveMemoryWarning方法进行清理操作。
  4. 多视图控制器跳转:在多个视图控制器跳转时,生命周期方法会按顺序调用,例如从A跳转到B时,A的viewWillDisappear:和viewDidDisappear:会被调用,而B的viewWillAppear:和viewDidAppear:会被调用。

示例代码

以下是一个简单的示例代码,展示了如何在生命周期方法中添加打印语句以调试:

- (void)viewDidLoad {

[super viewDidLoad];

NSLog(@"viewDidLoad");

}

- (void)viewWillAppear:(BOOL)animated {

[super viewWillAppear:animated];

NSLog(@"viewWillAppear");

}

- (void)viewDidAppear:(BOOL)animated {

[super viewDidAppear:animated];

NSLog(@"viewDidAppear");

}

- (void)viewWillDisappear:(BOOL)animated {

[super viewWillDisappear:animated];

NSLog(@"viewWillDisappear");

}

- (void)viewDidDisappear:(BOOL)animated {

[super viewDidDisappear:animated];

NSLog(@"viewDidDisappear");

}

- (void)dealloc {

NSLog(@"dealloc");

}

通过理解这些生命周期方法及其调用顺序,可以更好地管理视图控制器的状态和资源,从而提升应用的性能和用户体验。