

はじめてこの場を使用させていただきます。

現在、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 へと遷移後、１から読み込みをしたいのですが  
なんとかならないでしょうか・・・。

説明不足かもしれませんが、よろしくおねがいします。


CC BY-SA 3.0
2015-10-07T23:08:49.433
17391
2016-10-24T03:49:04.460
2016-07-07T00:49:02.383
76
12635
question
objective-c
removeFromParentViewControllerを使っての解放について


View Controllerのメモリ解放のタイミングについて、誤解があるように感じたので、確認させてください。  
モーダル表示されたView
Controllerは、`dismissViewControllerAnimated:`が完了したときにメモリ解放されます。`removeFromSuperview`しないと解放されないということはありません。  
このことを確かめるには、「viewcontroller B」に、`dealloc()`メソッドを記述してみます。

[code]

    - (void)dealloc {
        NSLog(@"ViewController B instance was released.");
    }
    
[/code]

viewcontroller
BをReceiverとして`dismissViewControllerAnimated:`を実行すると、直後、コンソールに「ViewController B
instance was released.」と出力されます。

* * *

モーダル表示を終了させても、メモリが期待どおり解放されていないのは、よくあるケースとして、 **循環参照** が考えられます。「Objective-c
ARC
循環参照」というようなキーワードでネット検索すると、循環参照に関する日本語の情報を見つけることができるでしょう。もとよりAppleの公式ドキュメントに直接あたられるなら、それに越したことはありません。


CC BY-SA 3.0
2015-10-08T07:04:44.533
17415
2015-10-08T07:04:44.533
7362
17391
answer