それぞれには重要な意味がある。
特に、nib内容に対する設定、読み出しはviewDidLoad以降でないとすべて無効になる。
中で読み込んでいるUI要素へのデリゲート設定もそう。
これ以前にやってもエラーは出ないのに誤動作する(というか動作しない)のでわかりにくい。
class=[[ClassName alloc]initWithNibName:@"ClassNibName" bundle:[NSBundle mainBundle]]; // この先並行動作する // nib読み取り終了はviewDidLoadで判定(かなり先になることもある) //view表示命令 [window addSubview:navigationController.view];とか
[mainView.navigationController popToViewController:self animated:YES];と記述した場合、
viewDidLoad
Nibの読み込みが実際に終わったときに呼び出される
メモリーオーバーによってViewDidUnloadが呼び出されない限り、初回のみ。
viewDidUnload
メモリーオーバーが発生したときに呼び出される。
不要なワークがあれば、ここで解放する。
次回Viewを表示する際には先にviewDidLoadが呼び出される
viewWillApear
表示直前に呼び出される
要素表示のon/off(.hidden=YES/NO)やラベルの表示内容の設定などはここまでで行う
UIPickerViewのカーソル位置設定はここでしないとうまくいかない
[pickerView_ selectRow:selectRow inComponent:0 animated:NO];
viewDidApear
表示直後に呼び出される
この後Viewへ制御が移る
viewWillDisapear
ビューが消える直前に呼び出される
viewDidDispear
ビューが消えた直後に呼び出される
なお、UIImagePickerControllerのオーバーレイではこれらの処理は通らない。
従って、オーバーレイはnibで作ると制御が難しいため、
オーバーレイではなく、普通のUIViewControllerで作って重ね合わせる方が得策である。
・・・2012/11/30追記
iOS6では細かい呼び出しタイミングが変更になっている。
各処理の終了を待たずに次の処理が走ることがあるのだ。
これに依存している場合は変更が必要になるので注意。
0 件のコメント:
コメントを投稿