0

簡単な質問があります。保持カウントが高い場合、自動解放は機能しますか?

たとえば...ビューコントローラーにいて、次のことを行うとします。

[self retain];
[self retain];
[self retain];
[self retain];
[self autorelease];

ビューをポップすると解放されますか?

ありがとう。

4

1 に答える 1

0

Autorelease は、オブジェクトを autorelease プールに追加するだけです。自動解放プールの割り当てが解除されると、オブジェクトとそのプール内の他のすべてのオブジェクトに解放メッセージが送信されます。保持カウントがまだ 0 より大きく、それ以上リリースしない場合は、メモリ リークが発生します。

上記のようにすれば、保持数は5になると思います(割り当てから1つ、上記の4つの保持から4つ)。オブジェクトを自動解放キューに追加したので、後で解放を受け取り、保持カウントを 1 減らします。最後にビューをポップすると、ビューがさらに 1 つ減ります。これにより、保持カウントが 3 になります。したがって、メモリ リークが発生すると思います。

ただし、iOS 5 を使用している場合、最新のコンパイラは ARC (自動参照カウント) を使用しているため、この問題を心配する必要はありません。まあ、ほとんどの場合。

編集済み: オブジェクトが自動解放プールから解放されたときに修正されました。参照: 高度なメモリ管理 間違った情報で申し訳ありません。

于 2012-07-13T20:28:47.833 に答える