Swift:重要的 IOS ViewController Life Cycle (生命週期)

Chun Yeung
Dec 24, 2017 · 4 min read

我們常常會說 App 的 life cycle,這裡是指 App 從開啟到關閉的狀態。下文我們會主要考慮二個情景,第一是對系統而言的 App 生活周期、第二種則是對App 內部運行而言的生命周期,在本文中都會一一介紹到。


我們來先談第一種,從下面流程圖我們可以看到好幾個狀況,分別是:

Not Running:
在一開始 App 還沒點開 / App 已被關閉後,App 的狀態就會在這邊,此時 App 不會給在記憶體當中。

Inactive:
當我們點開 App 後,App 的狀態就會轉為 Inactive,此時 App 開始做一點 SetUp,但是我們還不能使用它。很多 App 在此時都會使用一些準備畫面來渡過這個階段。

Medium 的 Launching Screen

Active:
此時 App 已經進入啟動的狀態,App 可以開始接收事件與回傳事件。UI 也可以開始運作,也就是我們平常在用的 App。

Background:
當我們把 App 關掉或換另一個 App,如按 Home 鍵後。App 就會進入 Inactive 狀態與 Background。此時,App 都還是在運作的狀態,但是 Interface 就不會進行更新或顯示。在幾秒之後,App 就會入進 Suspended 狀態。

Suspended:
當 App 進入 Suspended 狀態,App 就不能再執行任何的程度碼,但它仍然在記憶體中存放著。當下一次我們重新打開 App時,App 就會重新回到 Background,再回到 Inactive,最後達到 Action ,進入可以使用的狀態。


從以上流程圖,我們可以清晰看到整個 App 流程的發展,這就是我們常說的 Life Cycle。請大家可以從 ‘View not visible on screen’ 開始細心了解一下 App 每個 view 的運作週期

以下我們要來介紹一下在 UIViewController 中的幾種主要方法。

viewDidLoad:
當 view 被載入到記憶體後,但畫面未被顯示之前,就會呼叫viewDidLoad。我們通常會重寫 (overrider) 這方法來增加對 view 的初始化。

viewWillAppear:
這方法是當在 view 將呈現在畫面,且還沒有任何的動畫開始出現在畫面上時被呼叫的。我們可以重寫這個方法來執行與 view 關聯的自定義任務。例如,您可以使用此方法更改 status bar 的方向或樣式,以改變 status bar 即將在 view 呈現的樣子。

viewDidAppear:
在 viewWillAppear 結束後,即 view 被載入後到 view controller 後,就會載入這個方法。同樣地,我們可以透過重寫來增加任務到已經呈現的 view。

viewWillDisappear:
這個方法是當 view 將被移除,且動畫開始執行前呼叫的。我們可以重寫這個方法來改變 view 的各種狀態。如我們可以將被改變的 status bar 還原回來。

viewDidDisappear:
當 view 被移除後,我們可以使用這個方法來後這時刻的自定義任務。


不管我們使用 MVC 還是 MVVM 作為開發方式,ViewController 都是很重要的一環,另附上:Apple UIViewController 文件以供參考。

Chun Yeung

Written by

哲學系畢業,軟體工程師,喜愛學習,認為知識應該是開放的。在網路學習的同時也希望能回饋其他人。

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade