objective-cでマルチスレッド処理(GCD)

Grand Central Dispatch(以下GCD)を使うと、マルチスレッド処理が非常に簡単に行えちゃいます。

使用方法やシチュエーションは色んなパターンがあるのですが、一番利用するであろう重たい処理を別スレッドで実行させるパターンをメモっておきます。
重たい処理をメインスレッドで実行すると再描画が行われなくなったりユーザ操作に反応しなくなるので必須ですよ。


//GCDで非同期処理実行
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{

  //スレッド内では個別の autoreleasepool を作成する
  @autoreleasepool{

    // [重たい処理を実行する]

    dispatch_sync(dispatch_get_main_queue(), ^{

      // [メインスレッドでUIの更新を行う]

    });
  }
});

このほかにも dispatch_apply や dispatch_group_wait を使うと簡単に並列処理もできますよ。
これは別の機会に書きますね。
(→書いてみました)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です