iOS视图控制器的生命周期

谈到iOS的控制器的生命周期一般都是涉及一些函数的调用顺序。因此,我们在ViewController里进行如下测试:

//
//  ViewController.m
//  视图控制器生命周期测试
//
//  Created by hst on 16/4/20.
//  Copyright © 2016年 hst. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
/**
 初始化
 */
-(instancetype)initWithCoder:(NSCoder *)aDecoder
{
    if (self==[super initWithCoder:aDecoder]) {
        NSLog(@"initWithCoder called");
    }
    return self;
}

/**
 视图加载完毕
 注:一个UIViewController的一个生命周期内这个函数只会被调用一次
 */
- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"viewDidLoad called");
}

/**
 view将要出现,每次view消失再出现都会调用这个方法
 */
-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    NSLog(@"viewWillAppear called");
}

/**
 view已经出现在屏幕上的时候调用
 */
-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    NSLog(@"viewDidAppear called");
}

/**
 loadview之前的工作放在这里做
 */
-(void)awakeFromNib
{
    NSLog(@"awakeFromNib called");
}

/**
 简要对子视图进行布局
 */
-(void)viewWillLayoutSubviews
{
    NSLog(@"viewWillLayoutSubviews called");
}

/**
 完成对子视图的布局
 */
-(void)viewDidLayoutSubviews
{
    NSLog(@"viewDidLayoutSubviews called");
}

@end
输出结果为:

2016-04-20 22:14:08.993 视图控制器生命周期测试[818:21947] initWithCoder called

2016-04-20 22:14:08.994 视图控制器生命周期测试[818:21947] awakeFromNib called

2016-04-20 22:14:08.999 视图控制器生命周期测试[818:21947] viewDidLoad called

2016-04-20 22:14:08.999 视图控制器生命周期测试[818:21947] viewWillAppear called

2016-04-20 22:14:09.003 视图控制器生命周期测试[818:21947] viewWillLayoutSubviews called

2016-04-20 22:14:09.004 视图控制器生命周期测试[818:21947] viewDidLayoutSubviews called

2016-04-20 22:14:09.006 视图控制器生命周期测试[818:21947] viewDidAppear called


由上可知调用顺序为:

1 init函数(init;initWithFrame;initWithCoder;等)

2 awakeFromNib

3 viewDidLoad

4 viewWillAppear 

5 viewWillLayoutSubviews

6 viewDidLayoutSubviews

7 viewDidAppear

---上述代码里不含以下两个函数,但是它们在视图控制器的生命周期内

8 viewWillDisappear--View将要消失

9 viewDidDisappear--View已经消失

这九个就是通常的视图控制器生命周期内函数调用顺序,一定要清楚什么样的代码应该放在视图控制器生命周期的什么位置。

通常创建项目的时候会自动生成didReceiveMemoryWarning这个函数,它通常也在生命周期的考虑范围内,当内存不足时候会调用,这时候应当进行适当的内存释放,不然IOS会强制关闭当前的APP。

如有错误,敬请指出。


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值