標籤:log 編碼 lap 上下級 rbo TE elf nss nim
-(void)loadView;
- loadView方法在UIVIewController的view被訪問且為空白的時候調用。
- loadView方法不應該直接被調用,而是由系統調用。它會載入或建立一個View並把它賦值給UIViewController的view屬性。
以下代碼會導致死迴圈
-(void)loadView{
NSLog(@"ViewController loadView");
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSLog(@"ViewController viewDidLoad");
self.view.backgroundColor = [UIColor whiteColor];
}
- (void)viewDidLoad;
當loadView將view載入完成,會調用viewDidLoad方法,該方法在UIVIewController初始化過程中只會執行一次,在該方法中可以進行頁面相關的初始化。
-(void)viewWillAppear:(BOOL)animated;
- 頁面將要出現時調用。頁面每次即將出現時都會調用。
當app有多級ViewController,pop操作後都會調用即將出現的ViewController的該方法,如果每次ViewController的出現都需要重新整理頁面,可在該方法中實現。
-(void)viewWillLayoutSubviews;
ViewController的view即將對subviews進行布局。
-(void)viewDidLayoutSubviews;
ViewController的view對subviews的布局完成。
-(void)viewDidAppear:(BOOL)animated;
- 頁面已經出現時調用。頁面每次出現時都會調用。
在view被添加到視圖層級中以及多視圖,上下級視圖切換時調用這個方法,在這裡可以對正在顯示的視圖做進一步的設定。
-(void)viewWillDisappear:(BOOL)animated;
- 頁面將要消失時調用。可能會被多次調用。
頁面之間push或者pop時都會調用。
-(void)viewDidDisappear:(BOOL)animated;
- 頁面已經消失時調用。可能會被多次調用。
頁面之間push或者pop時都會調用。
-(void)dealloc;
- 頁面被銷毀時調用。
- 該方法可以用來調試頁面是否存在記憶體流失,如果存在,在頁面出棧時將不會調用該方法。
在該方法中可以處理需要手動釋放的東西,比如觀察者的移除。
常用周期方法執行順序由於我編碼習慣是純程式碼布局,所以對xib布局和storyboard布局的相關方法未加研究,代碼如下
(void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSLog(@"ViewController viewDidLoad");
self.view.backgroundColor = [UIColor whiteColor];
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
NSLog(@"ViewController viewWillAppear");
}
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
NSLog(@"ViewController viewDidAppear");
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
NSLog(@"ViewController viewWillDisappear");
}
-(void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
NSLog(@"ViewController viewDidDisappear");
}
-(void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
NSLog(@"ViewController viewWillLayoutSubviews");
}
-(void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
NSLog(@"ViewController viewDidLayoutSubviews");
}
ViewController viewDidLoad
ViewController viewWillAppear
ViewController viewWillLayoutSubviews
ViewController viewDidLayoutSubviews
ViewController viewDidAppear
以上只是顯示一個頁面的代碼和列印結果,下面我們來看一下頁面間的跳轉時,生命週期執行的順序。
從A頁面調轉到B頁面,A頁面代碼:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSLog(@"A viewDidLoad");
self.view.backgroundColor = [UIColor whiteColor];
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
NSLog(@"A viewWillAppear");
}
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
NSLog(@"A viewDidAppear");
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
NSLog(@"A viewWillDisappear");
}
-(void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
NSLog(@"A viewDidDisappear");
}
-(void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
NSLog(@"A viewWillLayoutSubviews");
}
-(void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
NSLog(@"A viewDidLayoutSubviews");
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)touchesBegan:(NSSet
B頁面代碼:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSLog(@"B viewDidLoad");
self.view.backgroundColor = [UIColor whiteColor];
}
-(void)dealloc{
NSLog(@"B dealloc");
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
NSLog(@"B viewWillAppear");
}
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
NSLog(@"B viewDidAppear");
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
NSLog(@"B viewWillDisappear");
}
-(void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
NSLog(@"B viewDidDisappear");
}
-(void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
NSLog(@"B viewWillLayoutSubviews");
}
-(void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
NSLog(@"B viewDidLayoutSubviews");
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)touchesBegan:(NSSet
}
從A頁面跳轉到B頁面,再從B頁面回到A頁面,列印結果:
A viewDidLoad
A viewWillAppear
A viewWillLayoutSubviews
A viewDidLayoutSubviews
A viewDidAppear
************************跳轉啦****************************
B viewDidLoad
A viewWillDisappear
B viewWillAppear
B viewWillLayoutSubviews
B viewDidLayoutSubviews
A viewDidDisappear
B viewDidAppear
************************回去啦****************************
B viewWillDisappear
A viewWillAppear
B viewDidDisappear
A viewDidAppear
B dealloc
【iOS】UIViewController的生命週期