免费开源的iOS开发学习平台

UIViewController介绍:3-控制器的生命周期

生命周期LifeCyle是在iOS开发中十分常见的一个词语,但很多初学者对于APP的生命周期、控制器的生命周期、视图的生命周期等等分辨起来比较困难,接下来我们会分别介绍在iOS开发过程中常见的几类对象的生命周期。本节首先介绍一下控制器的生命周期。

与控制器生命周期相关的常用方法

所谓控制器的生命周期,通俗来讲,就是控制器的创建、视图的加载与显示,以及控制器的销毁等操作。在UIViewController类中,定义了完整的控制器生命周期的方法,在不同的时间点会调用不同的方法,常用的方法有:

  • 控制器初始化方法
- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil;
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder;
  • 控制器视图加载与显示方法
- (void)loadView; 
- (void)viewDidLoad;
- (void)viewWillAppear:(BOOL)animated; 
- (void)viewDidAppear:(BOOL)animated;  
- (void)viewWillDisappear:(BOOL)animated; 
- (void)viewDidDisappear:(BOOL)animated;  
- (void)viewWillLayoutSubviews NS_AVAILABLE_IOS(5_0);
- (void)viewDidLayoutSubviews NS_AVAILABLE_IOS(5_0);
  • 控制器销毁时调用的相关方法
- (void)dealloc

控制器生命周期相关方法的调用时机

由于控制器的创建方法包括使用代码、使用xib以及使用Storyboard,通过不同的方式创建控制器时,调用的方法也略有区别。

  • 使用代码创建控制器。当使用代码创建控制器时,一般会使用init方法进行实例化。通过日志,可以发现此时调用的方法列表以及调用顺序如下:

  • 使用xib创建控制器。当使用xib创建控制器时,一般会使用initWithNibName:方法进行实例化。通过日志,可以发现此时调用的方法列表以及调用顺序如下:

  • 使用故事版StroyBoard创建控制器。当使用StroyBoard创建控制器时,程序在启动一开始,就会对StoryBoard文件进行读取,并且自动创建根控制器(即,带箭头的控制器),在创建过程中,会自动调用initWithCoder方法以及awakeFromNib方法。通过日志,我们还可以发现,实例化根控制器是在didFinishLaunchingWithOptions:这个方法之前就进行了。

示例代码

https://github.com/99ios/9.1.3