0

だから私はメモリに問題があります。ゲームでメモリが微妙に蓄積されているため、オブジェクトを適切に解放または割り当て解除していないようです。

次のようにすべてのオブジェクトを初期化します。

self = [super init];
if (self != nil) {
    //inititalize object
}

次のように、dealloc メソッドですべてのオブジェクトを解放します。

[object release], object = nil;

ここで、私のゲームはビューで実行されることに言及する必要があると感じています。サブビューを「currentView」という 1 つの変数にロードするメイン ビューがあります。このようにビューを切り替えます。

if (currentView != nil) {
    [currentView dealloc];
}
currentView = [[newView alloc] initWithVariables:vars];

問題がオブジェクトの初期化と割り当て解除にあるのか、それともビューにあるのかを知りたいです。また、機器に表示されない漏れを追跡するために使用できる戦略も知りたい.

私はこの情報をできるだけ早く必要としています. ありがとう。

編集:インストゥルメントを介して実行すると、アプリが使用するメモリが表示されます。と変な模様があります。最初のビューをロードすると、約で始まります。17MB使用。次に、2 番目のビューに切り替えると、最大 22 MB になります。ここで、最初のビューに戻ると、再び 17 MB まで下がることはありませんが、代わりに約 20 MB まで下がります。2つの間で切り替えを続けると、22mbと20mbの間になり、ほとんど同じままです。これはどのように説明できますか?

EDIT2: 上記の編集で説明されているパターンは、ゲーム全体で一貫しています。この一貫性のために、ゲームでレベルごとに 70kb のリークがあることに気付きました。明らかに、私のゲームが 100 MB 未満にとどまっている間は問題が発生しないはずなので、彼らが私のゲームを長時間プレイしない限り、これは問題になりません。

ただし、その 70kb のリークを追跡する方法を知りたいです。

4

1 に答える 1

0

releaseの代わりに使用する必要がありdeallocます。へのすべての呼び出しは、または;allocと一致する必要があります。あなたの場合、いつ解放されるかを制御したいからです。releaseautoreleaserelease

于 2011-10-18T20:10:06.023 に答える