若干前回の話題と前後するが引き続きメモリ管理の話です。

iPhoneアプリ開発の書籍等では、
説明を簡略化する目的と思われるがメモリ管理について、
最低限のコードしか書いていないケースがあります。

viewDidUnLoadについては結構無視されている事があるみたいだけど、
実際に公開するアプリを作る時は意識しないと
メモリリークで悩まされる事になりそう。

大体どこでもdeallocはインスタンス変数等、
retainしたものはここで解放しなければいけないってとこまでは書いてあるけど
viewDidUnLoadでもちゃんと解放処理を行う必要があります。

viewDidLoadでインスタンス変数の初期化(UIパーツの生成等)
を行うケースが多いと思うが、
ここで初期化している変数をviewDidUnLoadで解放します。

initで初期化している変数はviewDidUnLoadで解放してしまうと
再度viewDidLoadが呼ばれても読み込まれないのでdeallocでのみ解放します。

・すべてのインスタンス変数 ⇒ deallocで解放
・viewDidLoadで初期化する変数 ⇒ viewDidUnLoadとdeallocで解放。

ちなみに、viewDidUnLoadで解放する時は
[hoge release] の後に hoge = nil;
としておく。

こうすれば、viewDidUnLoadが呼ばれた後にdeallocが呼ばれても、
nilに対するreleaseが行われるだけ
(objective-cはnilにメッセージを送っても何も起こらない)
になりエラーとはなりません。