Flat Leon Works

アプリやゲームを作ってます。

BlocksとGCD(Grand Central Dispatch)についてのメモ

久しぶりにiOSプログラミングをしてみたところ、GCDについてさっぱり忘れていたので、次からはすぐに思い出せるようにメモ。

Blocksとは

Blocksは他の言語でいうところの無名関数、またはクロージャ。BlocksはAppleによるC言語の独自拡張機能なのでXcode付属のコンパイラでしか使えない。ObjectiveCはC言語を内包しているから、ObjectiveCでもBlocksを使うことができる。

GCDではBlocksを処理の単位として扱う。

Blocksメモ

  • キャプチャされた変数はキャプチャ時点のコピーとなる(参照ではない)
  • キャプチャされた変数をBlock内で書き換えるには、その変数の宣言時に__block指定子が付加されている必要がる

GCD(Grand Central Dispatch)とは

非同期処理を楽に行うためにAppleが作った仕組み。Dispatch Queueと呼ばれるキューに処理(Blocks)を追加するだけなので本当に楽。

Dispatch Queue

処理を実行するためのキュー。2種類ある。

Dispatch Queueの種類

  • Serial Dispatch Queue : 追加されたタスクを順番に実行する。1個のDispatch Queueにつき、1スレッド利用するので作り過ぎに注意。
  • Concurrent Dispatch Queue : 追加されたタスクを並行に実行する

Dispatch Queueの入手

Dispatch Queueは自分で作成することもできるし、システムが用意しているものを利用することもできる。システムが用意しているDispatch Queueは以下のものがある。

  • Main Dispatch Queue : メインスレッドで実行されるSerial Dispatch Queue
  • Global Dispatch Queue : 優先度別に4つあるConcurrent Dispatch Queue

入手方法は逆引きを参照

逆引き

リンク