您的位置:首页 > 产品设计 > UI/UE

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

2016-07-17 23:14 405 查看


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:]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios