1、控制器生命周期简介
所谓控制器的生命周期,通俗来讲,就是控制器的创建、视图的加载与显示,以及控制器的销毁等操作。
2、控制器生命周期的常用方法
在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)didReceiveMemoryWarning;
3、使用代码创建控制器时调用的方法列表
当使用代码创建控制器时,一般会使用init方法进行实例化。
通过日志,可以发现此时调用如下方法:
- 2015-12-24 17:55:04.025 LifeCycle[15457:3837664] -[AppDelegate application:didFinishLaunchingWithOptions:]
- 2015-12-24 17:55:04.026 LifeCycle[15457:3837664] -[ViewController init]
- 2015-12-24 17:55:04.029 LifeCycle[15457:3837664] -[ViewController loadView]
- 2015-12-24 17:55:04.031 LifeCycle[15457:3837664] -[ViewController viewDidLoad]
- 2015-12-24 17:55:04.031 LifeCycle[15457:3837664] -[ViewController myNibView]
- 2015-12-24 17:55:04.035 LifeCycle[15457:3837664] -[ViewController viewWillAppear:]
- 2015-12-24 17:55:04.038 LifeCycle[15457:3837664] -[AppDelegate applicationDidBecomeActive:]
- 2015-12-24 17:55:04.040 LifeCycle[15457:3837664] -[ViewController viewWillLayoutSubviews]
- 2015-12-24 17:55:04.049 LifeCycle[15457:3837664] -[ViewController viewDidLayoutSubviews]
- 2015-12-24 17:55:04.051 LifeCycle[15457:3837664] -[ViewController viewWillLayoutSubviews]
- 2015-12-24 17:55:04.095 LifeCycle[15457:3837664] -[ViewController viewDidLayoutSubviews]
- 2015-12-24 17:55:04.100 LifeCycle[15457:3837664] -[ViewController viewDidAppear:]
4、使用xib创建控制器时调用的方法列表
当使用xib创建控制器时,一般会使用initWithNibName:方法进行实例化。
通过日志,可以发现此时调用如下方法:
- 2015-12-24 17:56:18.232 LifeCycle[15470:3839342] -[AppDelegate application:didFinishLaunchingWithOptions:]
- 2015-12-24 17:56:18.232 LifeCycle[15470:3839342] -[XibViewController initWithNibName:bundle:]
- 2015-12-24 17:56:18.235 LifeCycle[15470:3839342] -[XibViewController loadView]
- 2015-12-24 17:56:18.235 LifeCycle[15470:3839342] -[XibViewController viewDidLoad]
- 2015-12-24 17:56:18.236 LifeCycle[15470:3839342] -[XibViewController myNibView]
- 2015-12-24 17:56:18.239 LifeCycle[15470:3839342] -[XibViewController viewWillAppear:]
- 2015-12-24 17:56:18.241 LifeCycle[15470:3839342] -[AppDelegate applicationDidBecomeActive:]
- 2015-12-24 17:56:18.243 LifeCycle[15470:3839342] -[XibViewController viewWillLayoutSubviews]
- 2015-12-24 17:56:18.251 LifeCycle[15470:3839342] -[XibViewController viewDidLayoutSubviews]
- 2015-12-24 17:56:18.253 LifeCycle[15470:3839342] -[XibViewController viewWillLayoutSubviews]
- 2015-12-24 17:56:18.253 LifeCycle[15470:3839342] -[XibViewController viewDidLayoutSubviews]
- 2015-12-24 17:56:18.258 LifeCycle[15470:3839342] -[XibViewController viewDidAppear:]
5、使用故事版StroyBoard创建控制器时调用的方法列表
- 当使用StroyBoard创建控制器时,程序在启动一开始,就会对StoryBoard文件进行读取,并且自动创建根控制器(即,带箭头的控制器),在创建过程中,会自动调用initWithCoder方法以及awakeFromNib方法。
- 通过日志,我们还可以发现,实例化根控制器是在didFinishLaunchingWithOptions:这个方法之前就进行了。
- 2015-12-24 17:59:49.124 LifeCycle[15490:3842901] -[SBViewController1 initWithCoder:]
- 2015-12-24 17:59:49.127 LifeCycle[15490:3842901] -[SBViewController1 awakeFromNib]
- 2015-12-24 17:59:49.131 LifeCycle[15490:3842901] -[AppDelegate application:didFinishLaunchingWithOptions:]
- 2015-12-24 17:59:49.131 LifeCycle[15490:3842901] -[SBViewController1 loadView]
- 2015-12-24 17:59:49.134 LifeCycle[15490:3842901] -[SBViewController1 viewDidLoad]
- 2015-12-24 17:59:49.134 LifeCycle[15490:3842901] -[SBViewController1 viewWillAppear:]
- 2015-12-24 17:59:49.136 LifeCycle[15490:3842901] -[AppDelegate applicationDidBecomeActive:]
- 2015-12-24 17:59:49.139 LifeCycle[15490:3842901] -[SBViewController1 viewWillLayoutSubviews]
- 2015-12-24 17:59:49.140 LifeCycle[15490:3842901] -[SBViewController1 viewDidLayoutSubviews]
- 2015-12-24 17:59:49.143 LifeCycle[15490:3842901] -[SBViewController1 viewDidAppear:]