1

NSOperationキュー内で使用するカスタム サブクラスをいくつか実装しました。

どこに設定する必要がありますか (または設定でき@autoreleasepoolますか? )

カスタム操作のmainメソッド内で?

または、操作をキュー インスタンスに追加するステートメントのあたりでしょうか。

編集:

ブロックを使用して操作を追加するとどうなりますか? @autoreleasepoolブロックにも入る必要がありますか?

関連性がある場合は、ARCを使用しています。

4

1 に答える 1

0

自動解放プールを使用する主な理由は、一時的な不要なオブジェクトの巨大な集約を防ぐためです。たとえば、操作で一連の画像を開き、それらの一部を抽出して(NSDataオブジェクトに保存)、最後のステップとして新しい部分を画像に変換するとします。

その場合は、開いている部分と抽出している部分を自動解放プールに入れ(NSDataオブジェクトが適切に保持されていることを確認します)、それを終了してから、新しいイメージを作成して保存します。そうすれば、開かれたすべての画像が確実にリリースされます。

操作で自動解放プールを一般的に使用する理由はありません。操作がキューを終了すると、そのときまたはその直後にキューが終了するのと同じようになります。

実際、ARCを使用すると、コンパイラーはオブジェクトを自動解放プールから引き出し、保持し、不要なときに直接解放することがあります。

あなたがプールの差し迫った必要性を知っていない限り、私はそれを使いません。ここで、「start」メソッドを使用して同時NSOperationを使用する場合、それは別の話であり、プールを使用して実行ループの周りにコードをラップする必要があります。

于 2012-09-25T17:43:34.697 に答える