事件發生的順序非常重要,這好讓程式設計師能在適當的時機執行動作,我想用文字描述再多,可能還是會讓人迷迷糊糊,不過……總算是找到一張相當有代表性的圖解-視圖的生命週期(View Life Cycle),讓我總算豁然開朗!
已經開發兩個APP專案的我,總算可以因為這一張視圖的生命週期圖解,回顧當時所疑惑的問題,在此都可以得到解答!
ViewController的生命週期中各方法執行順序如下:
- init—>
- loadView—>
- viewDidLoad—>
- viewWillAppear—>
- viewDidAppear—>
- viewWillDisappear—>
- viewDidDisappear—>
- viewWillUnload->
- viewDidUnload—>
- 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 lifecycle、UIViewController Class Reference、IOS學習筆記37——ViewController生命週期詳解。
Comments on: "[iOS] 視圖的生命週期 (View Life Cycle)" (5)
[…] 先前已經了解過視圖的生命週期 (View Life Cycle),現在來研究高一層級的應用程式的生命週期 (App Life Cycle)。開發超過六年(從2012年開始)iOS App的我,儘管已爐火純青可以隨意開發一款iOS App,然而再習以為常的開發過程,一定還存在些我不太熟悉的細節!套句郭台銘的霸氣台詞「魔鬼藏在細節中!」所以若能透過圖解的方式來更理解兩個生命週期,想必能研發出品質更好的iOS App。 […]
讚讚
[…] 在寫iOS Native App時早已知道視圖生命週期 (View Life Cycle)非常重要,因為它會決定我們接下來時做的流程。現在使用Ionic同樣也有視圖生命週期 (Ionic View Life Cycle),現在就稍微來瞭解其前後關係吧! […]
讚讚
[…] 寫APP一段時間之後,就會發現「流程」非常重要,倘若在學期初期非常清楚整個流程,在開發上想必能順利許多!之前已介紹視圖的生命週期 (View Life Cycle),現在來看看在它之前的APP啟動順序 (App Launch Sequence)。 […]
讚讚
好棒的文章,整理得好好!
讚讚
呵~好久不見!謝謝你介紹我到iOS相關的粉絲團~在那兒讓我收獲良多,加速我對iOS的熟悉~ 😀
讚讚