LifeCycle(ライフサイクル)とは
日常生活でも聞くことが多いライフサイクルと言う単語ですが、swiftのライフサイクルとはUIKitによって提供され、アプリの起動、状態遷移、終了などを管理する概念のことです。
それに付随するものとして、ViewControllerのライフサイクルメソッドというものがるので、今回はそれについて紹介していきます。
ViewControllerのライフサイクルメソッド
ViewControllerは以下のライフサイクルメソッドを持ちます。
- loadView
- viewDidLoad
- viewWillAppear
- viewDidAppear
- viewWillLayoutSubviews
- viewDidLayoutSubviews
- viewWillDisappear
- viewDidDisappear
viewDidLoadはviewController生成時にデフォルトで書かれているため、馴染み深いと思います。
loadView
viewを生成したときに一度だけ呼ばれます。あまり使う機会はないかもしれません。
viewDidLoad
viewをメモリに読み込んだときに一度だけ呼ばれます。navigationやmodalから戻ってきたときには呼ばれないので、注意が必要です。
viewWillAppear
viewがメモリから読み込まれて、実際に画面に表示される直前に呼ばれるメソッドです。navigationやmodalから戻ってきたときにも呼ばれます。
viewDidAppear
viewがメモリから読み込まれて、実際に画面に表示された直後に呼ばれるメソッドです。(ヒエラルキーに追加される、といいます)
viewWillLayoutSubviews
UIパーツをaddSubViewするときや、デバイスの画面の向きが変更される直前に呼ばれるメソッドです。
viewDidLayoutSubviews
addSubViewなどの処理が完了した直後に呼ばれるメソッドです。
ここで見た目が確定されるので、boundsなどのプロパティを利用する処理がある場合はここに書きます。
viewWillDisappear
viewが画面から削除される直前に呼ばれるメソッドです
たとえnavigationController等で遷移したとしても、画面から削除されているということになるので、呼ばれることになります。viewWillAppearと対応させると覚えやすいです。
viewDidDisappear
viewが画面から削除された直後に呼ばれるメソッドです。(ヒエラルキーから取り除かれる、といいます)
これでライフサイクルメソッドは最後です。たとえば
- 背景色の変更やボタンの丸みの変更など、一度実行すれば良い処理をviewWillAppearに記述する。
- モーダル遷移先でデータの変更をして、それを反映させる処理をviewDidLoadに書いてしまい、画面に値が反映されない。
といった問題を起こさないためにも、ライフサイクルメソッドを理解することは重要となります。
サンプルアプリ
ライフサイクルの順序や実行されるかどうかを実際に確認するために、サンプルアプリを作成しました。それぞれのライフサイクルメソッドの中で、関数名を出力するようになっています。
navigationでの遷移やtabBarでの遷移とも絡めてコンソールに出力される様になっているので、もっと細かく知りたいという方は、ぜひgitからクローンして、いろいろな処理を試してみてください。
さいごに
意外と処理通りの命名規則のため、英語がわかれば覚えやすいと思います。
みなさんもライフサイクルメソッドを理解して、処理を適切な場所に記述してみましょう!
参考文献