Just a Computer Graphics Studio & My Life

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

Advertisements

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

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

    喜歡

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

    喜歡

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

    喜歡

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: