UIViewController ライフサイクルについて その2




前回書いた
UIViewController ライフサイクルについて その1の続きです。


その1ではライフサイクルの順番について確認してみました。
今回はさらに各メソッドの詳細や処理されるタイミング等についてまとめたいと思います。


各メソッドの役割は以下のようです。
メソッド 内容
-(void)loadView nibファイルでviewを生成せずに、
viewをプログラム内で生成する場合に使用する。
呼び出し順番としては
Viewが生成される前に呼び出される。
ある条件の時以外はViewController生成後、
一度しか呼び出されない。※1
-(void)viewDidLoad nibを使用した場合はnibで定義されたviewが
準備完了した場合に、
nibを使用しなかった場合はloadViewで
生成したViewが準備できたタイミングで
呼び出される。
ある条件の時以外はViewController生成後、
一度しか呼び出されない。※1
-(void)viewWillAppear:(BOOL)animated viewが表示される直前に呼び出される。
viewControllerが生成後、
呼び出される度にメソッドも呼び出される。※2
-(void)viewDidAppear:(BOOL)animated viewが表示される直後に呼び出される。
viewControllerが生成後、
呼び出される度にメソッドも呼び出される。※2
-(void)viewWillDisappear:(BOOL)animated viewが非表示になる直前に呼び出される。
viewControllerが生成後、
消される度にメソッドも呼び出される。※2
-(void)viewDidDisappear:(BOOL)animated viewが非表示になった直後に呼び出される。
viewControllerが生成後、
消される度にメソッドも呼び出される。※2

※1 didReceiveMemoryWarningが発生した場合に、
viewDidUnloadが呼ばれた後に再ロードとしてもう一度呼ばれる

※2 一度、UIViewControllerが生成され、再表示が発生した場合に呼び出される。
例えば、presentModalViewControllerしたUIViewControllerに
dismissModalViewControllerAnimatedして戻ってきた時などが該当する。



前回確認した順序にviewの表示、非表示を追加すると
表示系が

loadView → viewが準備できた → viewDidLoad → viewWillAppear → viewが表示 → viewDidAppear
消去系が

viewWillDisappear → viewControllwerが非表示 → viewDidDisappear
という順になるようです。



特に今回の調べた部分で一番解りづらかった部分(今でもあくまで、個人的な見解です)
はloadViewとviewDidLoadの差でした。


この部分の話しは他にも色々なサイトや本で記述されていて、
nibにviewがない場合にloadViewが呼ばれるなど記載されている事が多くありました。
ですが、自分の調査の中ではnibがあった場合に.viewを呼ばなくても
loadViewはUIViewControllerが生成されるたびに呼ばれている気がします。
(loadViewの中でまさにviewを読み出しているという感じです)


他では、viewWillDisappear〜viewDidDisappearが呼ばれる時と呼ばれない時が
あるんですがその部分も中々わかりづらい部分かもしれません。
今回調べた詳細を「loadViewとviewDidLoad」、
「ライフサイクルの呼ばれ方」の様に分けて次回以降に記載できればと思います。





Shareしていただけると励みになりますので
良ければよろしくお願いします