日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UIViewController 生命周期

發(fā)布時間:2025/5/22 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UIViewController 生命周期 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。