viewLoadedとメモリ不足
開発していて、viewLoadedが何度も呼ばれてしまうという現象に出会いました。
あるview AをUINavigationViewで表示 → view Bをpush -> view Bをpopしてview Aに戻る
ところで、view AのviewLoadedが再度呼ばれる。本来ならview Aが最初に表示されたときに呼ばれるはず...おかしいなぁとおもっていろいろやっていたんですが、その鍵は
didReceiveMemoryWarning
にありました。
UIViewControllerは、didReceiveMemoryWarning(つまりメモリが少ない!という警告)をうけとったら、superviewのないviewをリリースするという実装になっています。上の例で、view Bを表示するときにメモリ不足に陥り、didReceiveMemoryWarningが呼ばれていたようです。didReceiveMemoryWarning はデフォルトのままになっていたんですが、そうすると隠れているview Aはsuperviewがないためリリースされます。view Bをpopしてview Aに戻ったときに、再度view Aがロードされ、viewLoadedが呼ばれる。こういうことだったんですね。
viewLoadedに種々の初期化の手続きを書くのが好きな人は注意しましょう。
これは自分に対するメモとして書いておきます。