7

iPhoneゲームを作っています。割り当てられている、または保持されているすべてのオブジェクトを解放したいと考えています。関数では、deallocそのようなオブジェクトをすべて解放していますが、オブジェクトがまだ割り当てられていないときにオブジェクトを解放してしまうことがあることに気付きました。retainCountそのため、リリースする前に、その値がゼロより大きいかどうかを確認する必要があると考えました。

私の質問は:

retainCountがゼロより大きいかどうかを確認してからリリースするだけですか?

if([bg retainCount]!=0)
{
  [bg release];
}

また

何度でも解放するべきかretainCount

while([bg retainCount]!=0)
{
  [bg release];
}

ご協力いただきありがとうございます!

4

2 に答える 2

78

-retainCount は使用しないでください。

オブジェクトの絶対保持カウントは無意味です。

releaseオブジェクトを保持させたのとまったく同じ回数呼び出す必要があります。それ以下ではなく (リークが好きでない限り)、もちろんそれ以上でもありません (クラッシュが好きでない限り)。

詳細については、メモリ管理ガイドラインを参照してください。

于 2010-09-16T21:07:52.683 に答える
2

Autorelease を使用すると、retainCount が無意味になります。保持とオブジェクトを所有しているかどうかを追跡します。これらのルールを調べて覚えておいてください: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html#//apple_ref/doc/uid/20000994-BAJHFBGH

于 2010-09-16T21:28:20.313 に答える