mzgkworks.com

Stack the little bets.

Swift3 ViewControllerのライフサイクル

   [Programing]    #Swift    #iOS

ViewControllerのルートViewのライフサイクルを再確認。
各メソッドに以下のようなデバッグログを埋め込んで確認。

override func loadView() {
    super.loadView()
    print("VC1 :", #function)
    // #functionで関数名が表示される
}

環境

  • Xcode 8.1
  • Swift 3
  • シュミュレーターで確認(iPhone6s 10.1)

起動 → ホームボタン → アプリアイコン

起動

  1. application(_:didFinishLaunchingWithOptions:)
  2. VC1 : loadView()
  3. VC1 : viewDidLoad()
  4. VC1 : viewWillAppear
  5. applicationDidBecomeActive
  6. VC1 : viewWillLayoutSubviews()
  7. VC1 : viewDidLayoutSubviews()
  8. VC1 : viewWillLayoutSubviews()
  9. VC1 : viewDidLayoutSubviews()
  10. VC1 : viewDidAppear

ホームボタンをタップ

  1. applicationWillResignActive
  2. applicationDidEnterBackground

アプリアイコンをタップ

  1. applicationWillEnterForeground
  2. applicationDidBecomeActive

VC1(ボタンタップ) → VC2(モーダル表示)

画面遷移

  1. VC1 : prepare(for:sender:)
  2. VC2 : loadView()
  3. VC2 : viewDidLoad()
  4. VC1 : viewWillDisappear
  5. VC2 : viewWillAppear
  6. VC2 : viewWillLayoutSubviews()
  7. VC2 : viewDidLayoutSubviews()
  8. VC1 : viewWillLayoutSubviews() ← 謎
  9. VC1 : viewDidLayoutSubviews() ← 謎
  10. VC2 : viewWillLayoutSubviews() ← 謎
  11. VC2 : viewDidLayoutSubviews() ← 謎
  12. VC2 : viewDidAppear
  13. VC1 : viewDidDisappear