Just My Life & My Work

事件發生的順序非常重要,這好讓程式設計師能在適當的時機執行動作,我想用文字描述再多,可能還是會讓人迷迷糊糊,不過……總算是找到一張相當有代表性的圖解-視圖的生命週期(View Life Cycle),讓我總算豁然開朗!

已經開發兩個APP專案的我,總算可以因為這一張視圖的生命週期圖解,回顧當時所疑惑的問題,在此都可以得到解答!

UIViewController lifecycle

ViewController的生命週期中各方法執行順序如下:

  1. init—>
  2. loadView—>
  3. viewDidLoad—>
  4. viewWillAppear—>
  5. viewDidAppear—>
  6. viewWillDisappear—>
  7. viewDidDisappear—>
  8. viewWillUnload->
  9. viewDidUnload—>
  10. dealloc

ViewController是iOS開發中MVC模式中的C,ViewController是View的Controller(所以如此命名),ViewController的職責主要包括管理內部各個View的載入、顯示和釋放,同時負責與其它ViewController的溝通與協調。

在iOS中,有兩類ViewController

  • 一類是顯示內容的ViewController:比如UIViewController、UITableViewController等,同時還可以自定義繼承自UIViewController的ViewController。
  • 另一類是ViewController容器:UINavigationViewController和UITabBarController等,UINavigationController是以Stack的形式來存儲和管理ViewController,UITabBarController是以Array的形式來管理ViewController。

從圖中可以看到,在View載入過程中首先會調用loadView方法,在這個方法中主要完成一些關鍵View的初始化工作,比如UINavigationViewController和UITabBarController等容器類的ViewController;接下來就是載入View,成功載入後,接著會調用viewDidLoad方法,這裡要記住的重點是,在loadView之前,是沒有View的,換句話說在這之前,View還沒有被初始化。完成viewDidLoad方法後,ViewController裡面才會成功載入view。

在Controller中創建View有兩種方式,一種是透過code產生、一種是透過Storyboard或Interface Builder來建立,後者有比較直觀的配置View的外觀和屬性。

多寫幾次專案,自然就有感覺了:)

參考:IOS6了再說說ViewController的生命週期和didReceiveMemoryWarning後的流程Looking to understand the iOS UIViewController lifecycleUIViewController Class ReferenceIOS學習筆記37——ViewController生命週期詳解

Comments on: "[iOS] 視圖的生命週期 (View Life Cycle)" (5)

  1. […] 先前已經了解過視圖的生命週期 (View Life Cycle),現在來研究高一層級的應用程式的生命週期 (App Life Cycle)。開發超過六年(從2012年開始)iOS App的我,儘管已爐火純青可以隨意開發一款iOS App,然而再習以為常的開發過程,一定還存在些我不太熟悉的細節!套句郭台銘的霸氣台詞「魔鬼藏在細節中!」所以若能透過圖解的方式來更理解兩個生命週期,想必能研發出品質更好的iOS App。 […]

  2. […] 在寫iOS Native App時早已知道視圖生命週期 (View Life Cycle)非常重要,因為它會決定我們接下來時做的流程。現在使用Ionic同樣也有視圖生命週期 (Ionic View Life Cycle),現在就稍微來瞭解其前後關係吧! […]

  3. […] 寫APP一段時間之後,就會發現「流程」非常重要,倘若在學期初期非常清楚整個流程,在開發上想必能順利許多!之前已介紹視圖的生命週期 (View Life Cycle),現在來看看在它之前的APP啟動順序 (App Launch Sequence)。 […]

  4. 好棒的文章,整理得好好!

隨意留個言吧:)~

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

標籤雲