質問: はじめてこの場を使用させていただきます。 現在、xcode6 objective-c を使用してゲームの開発を行っているのですが メモリの解放がうまくいきません。 viewcontroller A から viewcontroller B への遷移後 dismissViewControllerAnimatedを B で使用しているのですが viewcontroller A に戻った後もメモリは変わっていません。 インスタンス宣言したものを全てremoveFromSuperviewしても 全体の2割程度しか解放されませんでした。 dismissViewControllerAnimatedを使用し、BからAへと戻った後に 再度AからBへと遷移すると、 一部の変数の中身が残っている状態で様々な箇所でbad_accessが出てしまいます。 dismissViewControllerAnimatedを使用したときに viewcontroller B の中身を全てを解放し、 再度、A から B へと遷移後、1から読み込みをしたいのですが なんとかならないでしょうか・・・。 説明不足かもしれませんが、よろしくおねがいします。
回答: View Controllerのメモリ解放のタイミングについて、誤解があるように感じたので、確認させてください。 モーダル表示されたView Controllerは、`dismissViewControllerAnimated:`が完了したときにメモリ解放されます。`removeFromSuperview`しないと解放されないということはありません。 このことを確かめるには、「viewcontroller B」に、`dealloc()`メソッドを記述してみます。 ``` - (void)dealloc { NSLog(@"ViewController B instance was released."); } ``` viewcontroller BをReceiverとして`dismissViewControllerAnimated:`を実行すると、直後、コンソールに「ViewController B instance was released.」と出力されます。 モーダル表示を終了させても、メモリが期待どおり解放されていないのは、よくあるケースとして、**循環参照**が考えられます。「Objective-c ARC 循環参照」というようなキーワードでネット検索すると、循環参照に関する日本語の情報を見つけることができるでしょう。もとよりAppleの公式ドキュメントに直接あたられるなら、それに越したことはありません。