iOS 控制器ViewController的生命周期,以及各个方法调用的顺序

所谓控制器的生命周期,无非就是几个方法的调用顺序(如下方法按照顺序执行):

  • 加载根视图
/* 加载根视图 */
- (void)loadView {
    [super loadView];
    //控制器的根视图View是懒加载的;
    //加载View,创建View,优先级最高;
    //从nib载入视图,通常这一步不需要去干涉。除非你没有使用xib文件创建视图。(在定制 VC 时,如果覆盖loadView方法,不需要调用[super loadView] 方法
    //1.如果你要重写loadView,可以自定义一个与系统不一样的View
    //2.可以在根视图中添加一些一些子视图
    NSLog(@"%s",__FUNCTION__);

}
  • 控制器加载完毕的时候
- (void)viewDidLoad {
    [super viewDidLoad];
    
    //1.可以为控制器自定义数据,数据加载
    //2.动态创建其他控件(同名南昌会在这里做各种初始数据的载入,初始设定等很多内容)
    NSLog(@"%s",__FUNCTION__);
}
  • 控制器的View即将显示
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    //进行一些显示前的处理,比如键盘弹出,一些特殊过程动画,比如状态栏和* navigationbar*的颜色等
    //不会调整初始状态的界面布局;
    //在视图要展示出来之前,做些准备操作,约束还没生效;
     NSLog(@"%s",__FUNCTION__);
}

在- (void)viewWillAppear:(BOOL)animated 与 - (void)viewDidAppear:(BOOL)animated 之间还要执行两个关键的方法:

  • 根视图即将布局子视图
/* 根视图即将布局子视图 */
- (void)viewWillLayoutSubviews {
    [super viewWillLayoutSubviews];
      //Subviews的布局调整完毕之前要做的一些事情;
    /* 在根视图或者它的子视图的frame值发生改变 */
    /* 或者当前屏幕的状态发生改变时调用 */
    NSLog(@"%s",__FUNCTION__);
}
  • 根视图已经完成子视图的布局
/* 根视图已经完成子视图的布局 */
- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    //Subviews的布局调整完毕之后要做的一些事情;
      /* 比如,一旦imageView的frame值改变,切圆角的操作就放在这里进行 */
    NSLog(@"%s",__FUNCTION__);
    
}
  • 控制器的View已经显示
/* 控制器的View已经显示 */
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    
    //视图展示出来之后,约束已经生效;
    NSLog(@"%s",__FUNCTION__);
    
}
  • 控制器的View即将消失
/* 控制器的View即将消失*/
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    //视图即将从屏幕移除之前执行,此时还没有调用`removeFromSuperview`,视图即将被移除,覆盖时会在这里做一些善后处理和设置
     NSLog(@"%s",__FUNCTION__);
    
}
  • 控制器的View已经消失
/* 控制器的View已经消失*/
- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    //视图已经从屏幕上移除了,用户看不到这个视图了。此时已调用removeFromSuperview。
    //释放一些不再需要的资源,与UI显示有关的资源
    NSLog(@"%s",__FUNCTION__);
    
}

  • 接收到内存警告
/* 接收到内存警告 */
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    NSLog(@"%s",__FUNCTION__);
}

过时的方法 iOS6.0 之前

  • 即将销毁View
/* 即将销毁View */
- (void)viewWillUnload {
    // 发生内存警告时,在对其他视图销毁前调用。
    //销毁View
    NSLog(@"%s",__FUNCTION__);
}
  • 已经销毁View
/* 已经销毁View */
- (void)viewDidUnload {
    //发生内存警告时,如果视图不是当前屏幕正在显示的视图,viewDidUnload将会被执行,本视图所有子视图将被销毁以释放内存,此时开发者需要手动对viewLoad、viewDidLoad中创建的对象释放内存。因为当这个视图再次显示在屏幕上的时候viewLoad、viewDidLoad会再次被调用。
    //销毁一些不必要的属性 和数据
    NSLog(@"%s",__FUNCTION__);
}

** 给各个控制器view子控件添加约束**


图一.png

程序第一次运行,显示第一个控制器的时候,按照如下顺序执行:


输出台1.png

由第一个控制器右上角item按钮跳到第二个控制器的时候,执行打印:


输出台2.png

由第二个控制器View中的button按钮跳到第三个控制器的时候,执行打印:


输出台3.png

第二个控制器返回至第一个控制器的执行打印:


输出台4.png

第三个控制器返回至第二个控制器的执行打印:


输出台5.png

源码链接

参考文献

UIViewController的生命周期及iOS程序执行顺序
简书:学豆-控制器的生命周期

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容