私はiOSとObjective-Cにかなり慣れていません。
複雑な(または「複合」)操作の構成を可能な限り簡単にすることを目的としたプロジェクトを開発しています:https ://github.com/stanislaw/SACompositeOperations
そこには4種類の操作があります。2つの単一操作(同期と非同期)と2つの複雑な操作(カスケードと「トランザクション」)です。単一の操作は複雑な操作の「アトム」として使用されるため、Objective-Cのベストプラクティスに従って可能な限り優れたものにしたいと考えています。
私が興味を持っているのは、これらの単一の操作に対してどのコードを選択する必要があるかということです。
2つの単一操作の最初の「同期」を呼び出すとは、おそらく完了ハンドラーと非同期で何かを実行し、完了するまでフローをロックすることを意味します。「非同期」とは、真の非同期操作を意味します。操作ブロックを非同期で実行するだけです。
これが私が現在使用している単一の操作コードです:
同期操作
- (void)run:(syncOperationBlock)block {
self.semaphore = dispatch_semaphore_create(0);
block(self);
while (dispatch_semaphore_wait(self.semaphore, DISPATCH_TIME_NOW))
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
beforeDate:[NSDate dateWithTimeIntervalSinceNow:10]];
}
- (void)finish {
dispatch_semaphore_signal(self.semaphore);
}
@end
非同期操作
- (void)run:(asyncOperationBlock)block {
dispatch_queue_t queue = dispatch_queue_create("async_operation.queue", 0);
dispatch_async(queue, ^{
block(self);
});
}
誰かがこれらの単一の同期および非同期操作の解決策を提案できれば、私は感謝します:より一般的で、より一般的で、私が説明したケースにちょうど良い
簡単に言うと、強制同期操作、非同期操作に最適なコードは何ですか?
ありがとう。