关闭

iSO控制器的生命周期

标签: 函数app
150人阅读 评论(0) 收藏 举报

一个App有他的生命周期,同样App中的每个控制器也有他的生命周期,所谓控制器的生命周期,就是几个函数的调用顺序。这里,我们以storyboard创建控制器为例,说明说明一下控制器的生命周期。

initWithCoder

- (id)initWithCoder:(NSCoder *)aDecoder{
    if (self = [super initWithCoder:aDecoder]) {
        NSLog(@initWithCoder Called);
    }
    return self;
}

viewDidLoad

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@viewDidLoad Called);
    // Do any additional setup after loading the view, typically from a nib.    
}

viewWillAppear

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    NSLog(@viewWillAppear Called);
}

viewDidAppear

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    NSLog(@viewDidAppear Called);
}

awakeFromNib

-(void)awakeFromNib{
    NSLog(@awakeFromNib Called);
}

viewWillLayoutSubviews

-(void)viewWillLayoutSubviews{
    NSLog(@viewWillLayoutSubviews Called);
}

viewDidLayoutSubviews

-(void)viewDidLayoutSubviews{
    NSLog(@viewDidLayoutSubviews Called);
}

然后在模拟器上运行,运行结果如下:

initWithCoder Called
awakeFromNib Called
viewDidLoad Called
viewWillAppear Called
viewWillLayoutSubviews Called
viewDidLayoutSubviews Called
viewDidAppear Called

所以,调用顺序为

  1. init函数(init;initWithFrame;initWithCoder;等)--初始化

  2. awakeFromNib--在loadView之前的工作放在这里

  3. viewDidLoad--注意,一个ViewController一个生命周期内这个函数只会调用一次

  4. viewWillAppear -- view将要出现,每次View消失再出现都会调用

  5. viewWillLayoutSubviews--将要对子视图进行布局

  6. viewDidLayoutSubivews--完成对子视图布局

  7. viewDidAppear--视图将要出现在屏幕上

  8. viewWillDisappear--View将要消失

  9. viewDidDisappear--View已经消失

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:21766次
    • 积分:484
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:5篇
    • 译文:0篇
    • 评论:8条
    文章分类
    最新评论