Cocoa は、 や などの優れた同時実行管理クラスを提供しNSOperation
ますNSOperationQueue
。これらを使用して、作業 2 の完了後にメソッド 3 を呼び出し、作業 1 の完了後にメソッド 2 を呼び出すコードで明示的な接続を作成せずに、非同期呼び出しの連鎖の背後にあるロジックを簡素化することができます。依存関係管理を使用すると、操作間の依存関係を簡単に指定できます。
そのコードをどのように使用するかの簡単な例を次に示します。これら 3 つのメソッドすべてでデータを非同期的にダウンロードし、 というNSOperation
サブクラスを作成したとしますDownloadOperation
。
まず、 を作成しNSOperationQueue
ます。
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
次に、3 つのダウンロード操作を作成します。
DownloadOperation *a = [[DownloadOperation alloc] init];
DownloadOperation *b = [[DownloadOperation alloc] init];
DownloadOperation *c = [[DownloadOperation alloc] init];
次に、操作間の依存関係を指定します。依存関係は、依存するすべての操作が完了した場合にのみ操作を実行できることを意味します。あなたの例では、依存関係は次のようc <- b <- a
になります。これは、2 つのステップに分けることができます。
[b addDependency:a];
[c addDependency:b];
これらの操作をキューに追加します。
[queue addOperations:@[ a, b, c ] waitUntilFinished:NO];
この時点で、キューはすべての操作の処理を自動的に開始しますが、この連鎖的な依存関係を作成したため、特定の例では、それらは次々に実行されます。
https://github.com/AnuragMishra/ChainedOperationQueueの簡単な例でそれを示すサンプル プロジェクトを github で作成しました。タイマーを作成して非同期操作を偽装し、タイマーが終了すると、操作は完了としてマークされます。Xcode 4.5 を使用して記述されているため、古いバージョンでのコンパイルに問題がある場合はお知らせください。