2009-08-31 16 views
0

私は操作キューと呼び出し操作をセットアップしました。呼び出しが完了したことを通知する必要がありますか?操作キューがどのように呼び出しを終了し、次のものに移るのを知っているのではないか?操作キューは、一度に1つの操作を実行するように設定されています。NSInvocationOperationとNSOperationQueueの適切な使用

答えて

3

いいえ、呼び出しが完了したことを通知する必要はありません。 NSOperationQueueは、そのisFinishedプロパティがYESに設定されているときに操作が終了したことを認識します。これは、操作の-mainメソッドが復帰したときにデフォルトで発生します。

NSInvocationOperationの-mainメソッドは、すべての目的と目的のために、そのNSInvocationを呼び出して戻ります。したがって、呼び出しが完了した直後にisFinishedフラグをYESに設定する必要があります。それはあなたが本当にここに欲しいもののように思える

+0

私のタスクは、(画像をカメラロールに書き込むために)7秒かかることがあります。そのため、メモリを過負荷にしすぎると同時に実行することはあまりありません。イメージの保存が完了するまで、操作を続行しないようにするにはどうすればよいですか。画像保存操作には、保存された画像を示すコールバックがあります。 – Boon

+0

[theQueue setMaxConcurrentOperationCount:1]を使用すると、一度に1つだけが実行されます。 –

1

ブーン、

はNSOperationを自分でサブクラス化し、その中にあなたの非同期を呼び出すことです。非同期コードが完了し、コールバックを取得すると、KVO経由でisExecutingおよびisFinishedが更新されます。これはデイブDribinのブログで、上ではるかに詳細に説明されています

http://www.dribin.org/dave/blog/archives/2009/05/05/concurrent_operations/

0

それはNSInvocationOperationの自動です。あなたはすでにいいですね。

アプリの他の部分に操作が完了したことを伝える必要がある場合は、通知を使用できます。通知が正しいスレッドに送られていることを確認してください。 iPhoneでは、通知に応じてUIを頻繁に変更するため、メインスレッドに送信します。すべてのUIはメインスレッドで実行する必要があります。

[self performSelectorOnMainThread:@selector(postOpDoneNote) withObject:nil waitUntilDone:NO]; 

-(void) postOpDoneNote 
{ 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"someOpDone" object:self]; 
}