0

Autoreleaseプールに関するAppleデベロッパのサイト記事の「GuaranteeingtheFoundationOwnershipPolicy」の下 http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html#//apple_ref/doc / uid / 20000047-997594、彼らは自動解放プールを超えてオブジェクトの存続期間を延長することについて話します。

誰かが私にこの概念を使用できる状況を教えてもらえますか?

4

1 に答える 1

1

簡単な答え:ドキュメントが言っていることは、自動解放されたオブジェクトを自動解放プールに保持する必要がある場合は、それを保持する必要があるということです。

長い答え:たとえば、1000個のオブジェクトに対して特定の操作を実行する必要があるとします。これらのオブジェクトを使い終わったら、それらを自動リリースします。自動解放プールがないと、最終的に解放されますが、これらの1000個のオブジェクトをメモリに保持すると、プログラムが非常に遅くなる可能性があります(少なくとも自動解放されるまで)。

この問題を解決するために、100個のオブジェクトごとにクリーンアップされる自動解放プールを作成しています。ただし、最後のバッチの最後のオブジェクトを保持する必要がある場合はどうなりますか?私はまだそれらの他の99個のオブジェクトをパージする必要があります。私がやろうとしていることは、その最後のオブジェクトに保持メッセージを送信してから、自動解放プールをクリーンアップすることです。

このようにして、自動解放プールは、それらの100個のアイテムが不要になったことをシステムに通知しますが、それらの1つが必要であることをシステムにすでに通知しています。オブジェクトの以前の保持カウントが1の場合、オブジェクトは引き続き存在します。

1(元の保持カウント)+1(保持)-1(自動解放プール解放)=1。

これにより、自動解放プールが実行された後もオブジェクトが保持されます。

于 2010-07-01T21:31:53.223 に答える