iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
0
自我挑戰組

打造專案管理 iOS App 系列 第 29

UIView , UIViewController Life Cycle 常見問題

  • 分享至 

  • xImage
  •  

UIView , UIViewController Life Cycle 常見問題

在執行專案的過程中,會一直出現常見的幾個問題。生成UI的過程中,由於未生成完成,卻先layout。造成layout尚未完成,會是crash。這些種種問題,是因為對UIView 與 UIViewController Life Cycle 觀念不夠清楚導致的。今天參考了一些大神的文章,重新整理一下思緒。

UIViewController

ViewDidLoad

  1. 只會被呼叫一次,load 好了就會一直在記憶體裡面
  2. 常常在此 function 用 model 更新 UI,因為此時所有 outlets 都已經綁定完成
  3. 不應在此做任何 layout view 的動作 (更改 frame/bounds),因為此時的view 還沒出現在畫面上

viewWillAppear

  1. 會被呼叫不只一次,因為只要有返回到該畫面的可能性,該 controller 就會有不只一次「準備要顯示」的機會
  2. 可以在這邊做一些比較耗資源的操作,因為此時畫面已經確定將會顯示了
  3. 可以在這邊做一些 layout view 的操作,因為 view 已經出現在畫面上了

viewDidAppear, viewWillDisappear

字面上的意思,週期的一部分
大部分 view 的 layout 會交由 autolayout 來處理,但是也有需要手動改變 view layout 方式的時候,這時候有兩個 function 可以讓我們介入 autotlayout 對 view layout 的操作:

viewWillLayoutSubviews, viewDidLayoutSubviews

UIView

UIView 初始化的方式:

  1. init(frame:) :純 code layout UI 的初始化方法
  2. init(coder:) : Storyboard layout UI 的初始化方法
  3. awakeFromNib:在init(coder:) 呼叫後會呼叫這個 function

viewController產生的方法

  1. 從 storyboard 中初始化
  2. 呼叫 awakeFromNib()
  3. 呼叫 Segue 的準備方法
  4. 綁定 IBOutlets
  5. viewDidLoad()
  6. 顯示於畫面時:viewWillAppear -> viewDidAppear
  7. 離開畫面時: viewWillDisappear -> viewDidDisappear
  8. 任何 layout view 時:viewWillLayoutSubviews -> viewDidLayoutSubviews

Reference : https://medium.com/@kuotinyen/ios-%E9%9D%A2%E8%A9%A6%E9%A1%8C-1-38dbc900d746


上一篇
# 安能取熊掌而捨魚? 玩轉陰影
下一篇
無限風光在險峰 結案會議
系列文
打造專案管理 iOS App 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言