ネットワークコール、完了ブロック操作、デリゲート/通知などのN非同期操作をどのように実行しますか?このようなiOS - 非同期ブロックベースの操作の連結
考えるとN法:
- (void)methodNWithCompletion:(void (^)(Result *))completion {
Operation *operation = [Operation new];
// ...
// Asynchronous operation performed here
// ...
return;
}
は簡単な解決策は、前の1の終了ブロック内の各操作を呼び出すために、次のようになります。
[self method1WithCompletion:^(Result *result) {
// ...
[self method2WithCompletion:^(Result *result) {
// ...
[self method3WithCompletion:^(Result *result) {
// ...
[self method4WithCompletion:^(Result *result) {
NSLog(@"All done");
}
}
}
}
が、私はより多くのを探していますエレガントで再利用可能なソリューションで、書き込みや保守が簡単です(インデントされたブロックはほとんどありません)。
多くのおかげで、 DAN
質問が「完了したらどうすればわかるのですか?」という場合、通常は「dispatch_group」を使用します。したがって、各非同期呼び出しを行う前にグループに入り、非同期呼び出しの完了ハンドラ内のグループを終了し、すべての非同期呼び出しが完了したときに実行される 'dispatch_group_notify'を設定します。たとえば、http://stackoverflow.com/a/29716069/1271826またはhttp://stackoverflow.com/a/34532865/1271826 – Rob