簡単な質問があります。保持カウントが高い場合、自動解放は機能しますか?
たとえば...ビューコントローラーにいて、次のことを行うとします。
[self retain];
[self retain];
[self retain];
[self retain];
[self autorelease];
ビューをポップすると解放されますか?
ありがとう。
簡単な質問があります。保持カウントが高い場合、自動解放は機能しますか?
たとえば...ビューコントローラーにいて、次のことを行うとします。
[self retain];
[self retain];
[self retain];
[self retain];
[self autorelease];
ビューをポップすると解放されますか?
ありがとう。
Autorelease は、オブジェクトを autorelease プールに追加するだけです。自動解放プールの割り当てが解除されると、オブジェクトとそのプール内の他のすべてのオブジェクトに解放メッセージが送信されます。保持カウントがまだ 0 より大きく、それ以上リリースしない場合は、メモリ リークが発生します。
上記のようにすれば、保持数は5になると思います(割り当てから1つ、上記の4つの保持から4つ)。オブジェクトを自動解放キューに追加したので、後で解放を受け取り、保持カウントを 1 減らします。最後にビューをポップすると、ビューがさらに 1 つ減ります。これにより、保持カウントが 3 になります。したがって、メモリ リークが発生すると思います。
ただし、iOS 5 を使用している場合、最新のコンパイラは ARC (自動参照カウント) を使用しているため、この問題を心配する必要はありません。まあ、ほとんどの場合。
編集済み: オブジェクトが自動解放プールから解放されたときに修正されました。参照: 高度なメモリ管理 間違った情報で申し訳ありません。