iOSのUIViewControllerのライフサイクルを図にしてみた

UIViewControllerのライフサイクルについて、何度も調べている気がするので図にまとめてみました。

※誤った解釈があるかもしれません。お気づきの方は優しくご指摘いただけると僕が喜びます。

UIViewController Lifecycle

init

初期化処理をしている。「init」を読んでいるのに「initWithNibName:bundle:」が呼ばれるのは何故?

initWithNibName:bundle:

初期化処理をしているが、初期化するUIViewControllerに紐づくxibファイルがある時に使用する。NibNameにnilを指定して呼び出しても正常に動作する。xibが無い時は「init」を呼べば良いのでnilを指定する意味は無い気がする。

initWithCoder:

初期化処理をしている。どのような時に使用するのが効果的なのか不明?

loadView

xibを使用しないで、画面の各種Viewをコードで作っていく時にはココに書くと良いらしい。

viewDidLoad

xibが読み込まれた後に呼ばれる。xibを使用しない場合には「loadView」で追加した各種Viewが作られた後に呼ばれるらしい。「loadView」と「viewDidLoad」をどの様な時に使い分けるのだろう?

viewWillAppear:

Viewが表示される直前に呼ばれる。Viewのアニメーション動作が動く前。「presentModalViewController:」でモーダル画面を開いて、そのモーダル画面が「dismissModalViewControllerAnimated:」で閉じられる時や、「pushViewController:」で別画面が呼び出されて戻ってきた時にも呼び出される。画面がアクティブになる度に呼ばれると言う事かな?

viewDidAppear:

Viewが表示された直後に呼ばれる。Viewのアニメーション動作が終わった後。

viewWillDisappear:

Viewが非表示になる直前に呼ばれる。Viewのアニメーション動作が動く前。画面がインアクティブになる度に呼ばれると言う事かな?

viewDidDisappear:

Viewが非表示になった直後に呼ばれる。Viewのアニメーション動作が終わった後。

didReceiveMemoryWarning

ココはメモリ不足が発生した際にシステムから自動的に呼ばれる。画面のアクティブ、インアクティブに関係なく全てのControllerに呼び出しが発生するらしい。(未確認)インアクティブなControllerは続いて「viewDidUnload」が呼び出される。

viewDidUnload

メモリ不足が発生して且つControllerがインアクティブな場合に呼び出される。「dealloc」と同様にオブジェクトの解放をしてあげないとメモリリークが起こるみたい。

dealloc

Controllerが「release」されてメモリが解放される際に呼ばれる。使用したオブジェクトの解放が必要。

ライフサイクルについてはサンプルコードを書いて確かめたから多分あっていると思いますが、間違った解釈などあれば優しく教えていただけると幸いです。