私はiOS用のCocos2Dを使用してゲームを開発しています。
メニューなどのシーンとメインのゲームシーンがあります。メインシーンには、3つの動的オブジェクトしかありません。これらのオブジェクトは定期的に互いに撃ち合います(これらのオブジェクトが殺されるか、シーンから移動されるまで)。
ここで問題があります。ゲームは常にメモリを消費します。そして、私は自分が間違っていることを知りたいのです。
過剰に保持されたオブジェクトのような明らかなリークはありません。シーンがdealloc
編集され、オブジェクトが親から削除されてクリーンアップされ、アニメーションが停止します。
とにかく、メモリはどこかに行き続けます。私は次のコードを使用しています
+ (void) reportMemory
{
struct task_basic_info info;
mach_msg_type_number_t size = sizeof(info);
kern_return_t kerr = task_info(mach_task_self(),
TASK_BASIC_INFO,
(task_info_t)&info,
&size);
if (kerr == KERN_SUCCESS)
NSLog(@"Memory in use (in Kbytes): %f", info.resident_size / 1024.0);
else
NSLog(@"Error with task_info(): %s", mach_error_string(kerr));
}
シーンの各開始時に消費されたメモリの量を確認します。そして、報告された数は常に前のものよりも大きいです。
アロケーションプロファイラーを使用しようとしましたが、正直なところ、有用なものを見つけることができませんでした。リビングバイトの合計は基本的に同じですが、プロセスは常に何かを割り当てたり、割り当てを解除したりします。
あなたは私に何を見ることを提案しますか?基本的に、私の場合、メモリ操作をデバッグする方法についてアドバイスを求めています。
編集(私を助けたもの):
NSZombieEnabledをオンにしたことがわかりました。基本的に、それは一定のメモリ消費量の増加の主な要因でした。いくつかの有用な情報とヒントは@coneybeareの回答にあります
2番目に便利なことは、@ Jackが提案したように、Instruments(Leaks and Allocations)を使用することでした。それは私がいくつかの微妙なリークを見つけるのに役立ちました。