首页 > 技术文章 > 视图控制器生命周期--view ios

williamliuwen 2016-04-08 08:53 原文

1.直接上一个大概的图,给大家参考一下:

 

2.

viewWillAppear视图将要出现的时候调用

viewDidApperar视图已经出现的时候调用

viewWellDisappear视图将要消失的时候调用

viewDidDisappear视图已经消失的时候调用
 
3.下面说说真事环境的测试
- (void)viewDidLoad {
    [super viewDidLoad];

    NSLog(@"%s",__func__);
}

- (void)viewWillAppear:(BOOL)animated{
    NSLog(@"%s",__func__);
}

- (void)viewDidAppear:(BOOL)animated{
    NSLog(@"%s",__func__);
}

- (void)viewWillDisappear:(BOOL)animated{
    NSLog(@"%s",__func__);
}

- (void)viewDidDisappear:(BOOL)animated{
    NSLog(@"%s",__func__);
}

结果:我使用了上面的方法去做测试:

分两种情况:

第一种情况,只有一个视图控制器,且这段代码就是测试这个视图控制器,那么你进入程序到退出程序,会调用的方法有:

2016-04-08 20:41:28.894 p[30307:311272] -[dd viewDidLoad]
2016-04-08 20:41:28.894 p[30307:311272] -[dd viewWillAppear:]
2016-04-08 20:41:29.397 p[30307:311272] -[dd viewDidAppear:]

 第二种情况,有两个视图控制器,且这段代码是去测试第二个控制器,从第一个控制器跳到第二个;这个时候会调用,注意:现在还没有退回到第一个:会调用的是和上面第一种情况一样;但如果回到第一个控制器,现在还会调用:

2016-04-08 20:45:52.955 p[30556:314999] -[dd viewWillDisappear:]
2016-04-08 20:45:53.461 p[30556:314999] -[dd viewDidDisappear:]

 为什么会出现上面的情况呢?

网友的解答:可能是因为效率原因。第一个进去的viewController做这样的处理,避免再次构造。(不知道是不是这个原因,暂且记着)

 

推荐阅读