私はobjective-cの初心者で、プログラミングを始めたとき、オブジェクトを適切に解放する方法を本当に理解していませんでした。したがって、私のプロジェクトは Objective-c の世界への導入であるため、完全に省略しました。しかし、今となっては、このプロジェクトは、そのままにしておくのはもったいないという点で進化したと思います。したがって、すべてのalloc
s、copy
s、およびnew
s は別として、プロジェクトがまだ大量のメモリをリークしている理由を理解するのに深刻な問題があります。
Instruments のリーク ツールを使用しました (スクリーンショットを参照)。リークされたオブジェクトの配列全体が表示されます。私の質問: これは心配すべきことですか、それともこれらのオブジェクトはいつかリリースされますか? そうでない場合、どうすればリークの原因を見つけることができますか? cmd + e を押すと拡張詳細ウィンドウが表示されることはわかっていますが、これらの方法のどれを調べる必要がありますか? 開かなければならないのは私自身の方法だと思いますが、ほとんどの場合、レイヤーの割り当てと初期化が問題の原因であると言われています。
とはいえ、リークを効果的に検出する方法を知りたいです。leaks
インストゥルメントのバーを見ると、ゲーム レイヤーの初期化時に ( HelloWorldLayer
)、biiiig の赤い線が表示されます。ただし、これは初期化時のみです...だから、これについて心配する必要はありますか?
これがスクリーンショットです: ファイルへのリンク (拡大するため) -> http://i.stack.imgur.com/QXgc3.jpg
編集:
いくつかのリークを解決しましたが、今ではよくわからない別のリークがあります:
for (int i = 1; i<=18; i++) {
NSMutableDictionary *statsCopy = (NSMutableDictionary *)CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (CFDictionaryRef)stats, kCFPropertyListMutableContainers);
NSNumber *setDone = [num copy];
[levels setObject:statsCopy forKey:[NSString stringWithFormat:@"level%d", i]];
[levels setObject:setDone forKey:@"setDone"];
[statsCopy release];
[setDone release];
}
私がリリースしたにもかかわらず、彼はたまたまディープ コピーのリークを検出しました...