LoginSignup
44
44

More than 5 years have passed since last update.

[Objective-C] GCDで複数の非同期処理の終了を待つ

Posted at

前にも[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を同時に叩いて、全部のリクエストが返ってきたらなにか表示する、みたいなときに使えます。

44
44
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
44