前にも[Objective-C] GCDについての備忘録というメモを書きましたが、最近知った新しい方法も合わせてメモ。
jQueryのwhen
とかと似たような仕組みです。
サンプルコード
なにはともあれ、コードを見てもらったほうが早いでしょう。
gcd
dispatch_group_t group = dispatch_group_create();
// グループのカウントをひとつ増やす?
dispatch_group_enter(group);
[aClass loadFromNetwork:^(BOOL success) {
// do something.
// グループのカウントをひとつ減らす?
dispatch_group_leave(group);
}];
dispatch_group_enter(group);
[aClass2 loadFromNetwork:^(BOOL success) {
// do something.
dispatch_group_leave(group);
}];
// 以降、必要なだけ繰り返す。
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
// do something when all dispatches are done.
});
使っているのは
- dispatch_group_t
- dispatch_group_enter
- dispatch_group_leave
- dispatch_group_notify
の4つです。
イメージとしてはdispatch_group_enter
でカウントを1増やし、dispatch_group_leave
でカウントを1つ減らす感じです。
そしてカウントがすべて0になったらdispatch_group_notify
が呼ばれる、と。
使うシーンとしては、例えばいくつかのAPIを同時に叩いて、全部のリクエストが返ってきたらなにか表示する、みたいなときに使えます。