其实写了这么久的代码,真没有注意过这个问题,到底是viewdidload先调用还是viewdiddisappear先调用呢。
现在写了一个小例子来测测:
有两个viewcontroller,分别为ViewController(后面简称A)和BViewController(后面简称B)
//ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
//ViewController.m
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
-(void)viewDidAppear:(BOOL)animated
{
NSLog(@"A- viewDidAppear");
}
-(void)viewWillAppear:(BOOL)animated
{
NSLog(@"A- viewWillAppear");
}
-(void)viewWillDisappear:(BOOL)animated
{
NSLog(@"A- viewWillDisappear");
}
-(void)viewDidDisappear:(BOOL)animated
{
NSLog(@"A- viewDidDisappear");
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSLog(@"A- viewDidLoad");
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
//BViewController.h
#import <UIKit/UIKit.h>
@interface BViewController : UIViewController
@end
- 1
- 2
- 3
- 4
- 5
- 6
//BViewController.m
#import "BViewController.h"
@interface BViewController ()
@end
@implementation BViewController
-(void)viewDidAppear:(BOOL)animated
{
NSLog(@"B- viewDidAppear");
}
-(void)viewWillAppear:(BOOL)animated
{
NSLog(@"B- viewWillAppear");
}
-(void)viewWillDisappear:(BOOL)animated
{
NSLog(@"B- viewWillDisappear");
}
-(void)viewDidDisappear:(BOOL)animated
{
NSLog(@"B- viewDidDisappear");
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSLog(@"B- viewDidLoad");
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
启动app,首先出现A,运行结果如下:
2015-04-06 15:11:34.761 viewchange[729:25610] A- viewDidLoad
2015-04-06 15:11:34.762 viewchange[729:25610] A- viewWillAppear
2015-04-06 15:11:34.769 viewchange[729:25610] A- viewDidAppear
继续点击按钮A–>B,运行结果如下:
2015-04-06 15:12:15.670 viewchange[729:25610] B- viewDidLoad
2015-04-06 15:12:15.675 viewchange[729:25610] A- viewWillDisappear
2015-04-06 15:12:15.676 viewchange[729:25610] B- viewWillAppear
2015-04-06 15:12:16.182 viewchange[729:25610] B- viewDidAppear
2015-04-06 15:12:16.182 viewchange[729:25610] A- viewDidDisappear
清楚的知道这些运行顺序,让我更清楚在什么时候该做什么更合适。