1

NSOperationサブクラスでは、長いループの先頭で、またはサブクラスのメソッドの長いメソッド(Core Data Fetches、配列の並べ替えなど)の前にキャンセルをチェックしますmain。以下の例を参照してください。

-(void)main{

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    for( int i=0; i< 100; i++ )
    {
         //Check for cancellation
         if( [self isCancelled] ){
             [pool drain];
             return;
         }

    //Do the work
    }

    [pool drain];
}

プールを空にし、できるだけ早くメソッドを終了する以外に、他にすべきことはありますか?

4

1 に答える 1

2

1)正常に終了します

2)リスナー/委任者に適切に通知します。デリゲートがある場合は、複数の操作結果(成功、失敗またはエラー、キャンセル、タイムアウト)をサポートするコールバックまたはインターフェイス/プロトコルを提供する必要があります。リスナーは必ずしもキャンセルと呼ばれるオブジェクトではありませんが、そのような状況をどのように処理するかについて、より良いアイデアを持っている可能性があります。

3)オブジェクトの状態をクリーンアップします。たとえば、プログラムでアクセスできないオブジェクトを解放してゼロにしisCancelled、操作がマルチスレッドコンテキストで動作するかどうかを呼び出す呼び出しがチェックされることを確認します。

于 2010-11-07T13:42:57.680 に答える