UIViewController 生命周期
前言
UIViewController 往往是 iOS 頁面開發(fā)的基礎(chǔ),用戶交互和數(shù)據(jù)展示都是由它來控制,了解了它的生命周期,就能做到:在合適的時機(jī),做合適的事情。
順序
下面對 UIViewController 的每個生命周期函數(shù)進(jìn)行一個打印,確定它們的執(zhí)行順序。
@implementation ViewController- (void)loadView {[super loadView];NSLog(@"%@", NSStringFromSelector(_cmd)); }- (void)viewDidLoad {[super viewDidLoad];NSLog(@"%@", NSStringFromSelector(_cmd)); }- (void)viewWillAppear:(BOOL)animated {[super viewWillAppear:animated];NSLog(@"%@", NSStringFromSelector(_cmd)); }- (void)viewWillLayoutSubviews {[super viewWillLayoutSubviews];NSLog(@"%@", NSStringFromSelector(_cmd)); }- (void)viewDidLayoutSubviews {[super viewDidLayoutSubviews];NSLog(@"%@", NSStringFromSelector(_cmd)); }- (void)viewDidAppear:(BOOL)animated {[super viewDidAppear:animated];NSLog(@"%@", NSStringFromSelector(_cmd)); }@end 復(fù)制代碼含義
- loadView
此時,控制器的 view 還未初始化,可以通過重寫這個方法自定義控制器的 View,如果這樣做,那就不能調(diào)用[super loadView](上面代碼調(diào)用是為了方便打印,不然屏幕就是黑的)。
- viewDidLoad
在控制器的生命周期中,它只會被調(diào)用一次,此時,view 已經(jīng)初始化好,非常適合做一些頁面的初始化任務(wù)。由于此時 view 的 bounds 尚未確定,所以不適合寫 frame 類型的布局代碼,但是給視圖添加約束沒有影響。
- viewWillAppear
它會在控制器的視圖將要出現(xiàn)在屏幕中時被調(diào)用,在控制器生命周期中可能會被調(diào)用多次。在此處,適合做一些與視圖出現(xiàn)相關(guān)聯(lián)的任務(wù),例如改變狀態(tài)欄的方向、風(fēng)格。
- viewWillLayoutSubviews
當(dāng) view 的子視圖即將布局時,此方法會被調(diào)用,觸發(fā)的條件是:
- view 被添加到視圖層次中
- view 的 bounds 發(fā)生了改變
- 調(diào)用了 - setNeedsLayout方法
- 調(diào)用了 - layoutIfNeeded方法
這個方法是寫 frame 布局代碼的好地方,將 view 的子視圖布局好,每次 view 大小發(fā)生改變時,其子視圖布局也會相應(yīng)改變。
- viewDidLayoutSubviews
當(dāng) view 的子視圖已經(jīng)布局時,此方法會被調(diào)用,觸發(fā)條件同上。
- viewDidAppear
它會在控制器的視圖出現(xiàn)在屏幕后被調(diào)用,此時,view 的 bounds 已經(jīng)確定,不過在這里寫布局相關(guān)代碼,可能會反映到屏幕上。
- viewWillDisappear
視圖即將從屏幕中消失時觸發(fā)。
- viewDidDisppear
視圖從屏幕中消失后觸發(fā)。
問題
1、上面測試代碼中,- viewWillLayoutSubviews 方法打印了兩次?
答:因?yàn)?view 被添加到視圖層次中會觸發(fā)一次,view 的 bounds 改變還會觸發(fā)一次。
2、有控制器 A、B,從 A push 到 B,是 A 的 - viewDidDisappear 先觸發(fā),還是 B 的 - viewWillAppear 先觸發(fā)?
答:B。
總結(jié)
以上是生活随笔為你收集整理的UIViewController 生命周期的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DIV+CSS网页布局常用的一些基础知识
- 下一篇: 为什么说“概率”带来一场现代革命?