1

新しい iPhone アプリケーションを作成するたびに、ターゲットの作成、フレームワークの追加、およびこれを新しい main.m に作成することから始めます。

NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init];
// etc...

そのようなプールは実際には何ですか?それはなんのためですか?プールに落ちた場合、デバイスを保護することはできません。しかし、なぜそこにあるのですか?必要ですか?それは有益ですか、それとも悪ですか?ありがとう

4

2 に答える 2

4

NSAutoreleasePool は、所有者のないオブジェクトを処理し、プールの割り当てが解除されたときにそれらのオブジェクトの割り当てを解除する責任があります。この件に関するこのドキュメントを読むことをお勧めします。

例を挙げます:

  • NSAutoreleasePool を作成します。
  • あなたのコードは、オブジェクトを返すメソッドを呼び出しています。
  • そのメソッドでは、オブジェクトを作成しますが、その所有権を保持したくありません。このオブジェクトに、autorelease「私はもうこのオブジェクトを所有していません」というメッセージを送信します。プールがオブジェクトを処理するようになりました。オブジェクトが所有していなくても、解放されないことに注意してください。
  • 呼び出しコードでは、結果のオブジェクトを取得します。オブジェクトはまだ生きているので、使用できます。
  • プールの割り当てが解除されると、オブジェクトの割り当てが解除されます。
于 2010-06-27T07:36:57.230 に答える
1

自動解放プールは、「自動解放」と呼ばれるキャプチャーと考えることができるオブジェクトであり、プールが排出される (drainメッセージが送信される) と、プール内のこれらのオブジェクトのそれぞれに -release メソッドが送信されます。

于 2010-06-27T07:18:48.587 に答える