19

多くの本や多くのサイトで、私は-drainを見ています。さて、クールに聞こえる自動リリースプールの場合。しかし、それはリリース以外のことをしますか?-drainは、プール自体を解放せずに、プールにすべてのオブジェクトを解放させるだけだと思います。ただの推測。

4

3 に答える 3

25

-drain は NSAutoreleasePool を解放しないという oxigen の回答に関するコメントは正しくないことに注意してください。NSAutoreleasePoolのドキュメントには、-drain が NSAutoreleasePool を解放する (したがって破棄する) ことが明確に記載されています。

-drain は、NSAutoreleasePool オブジェクトの -release を使用する代わりのものです。唯一の違いは、ガベージ コレクション システムにヒントを提供することです。

于 2009-04-28T18:25:51.227 に答える
10

システムにガベージコレクションがある場合は、-drainはGCのメッセージ(objc_collect_if_needed)を送信します

GCを使用していない場合は、ドレイン=リリース

于 2009-04-28T11:33:55.477 に答える
10

Oxigen は正しいです。NSAutoreleasePooldrainのメソッドのドキュメントを参照してください。

参照カウント環境では、レシーバーを解放してポップします。ガベージ コレクション環境で、最後のコレクション以降に割り当てられたメモリが現在のしきい値よりも大きい場合、ガベージ コレクションをトリガーします。

于 2009-04-28T11:45:03.000 に答える