非同期メソッドがありますlongRunningMethodOnObject:completion:
このメソッドは、「オブジェクト」タイプのオブジェクトを受け取ります。そのデータを処理してから、完了ハンドラを呼び出します。
さまざまな「longRunningMethods」を呼び出して、すべてが完了するまで待つ必要があります。
「for」ループ内で、すべての「longRunningMethodOnObject」を互いに非同期 (並列) に実行したいと考えています。(「longRunningMethodOnObject」が互いに連続して実行されるかどうかはわかりませんが、これは一般的な質問です)
適切なセマフォを作成したかどうか確信が持てず、それらの間で同期する適切な方法についての説明をいただければ幸いです。
ラッパー関数のコードは次のとおりです。
-(void)applyLongRunningOperationOnObjectInArray:(NSArray *)theObjects completion:(completion)block
{
// offsetting to worker thread in my object
dispatch_async(self.myQueue,^{
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); //Not sure if this should be here or in the for loop
for(Object *ob in theObjects)
{
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); // the semaphore for the "for" loop - should this be here? or above the for loop
[GlobalObject longRunningMethodOnObject:ob completion:^{ // would like each call to be independant of previous call in for loop
dispatch_semaphore_signal(semaphore); // signaling that it completed
}];
}
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); // would like to wait here for each semaphore
block(); // invoke the completion handler
});
}