以前は NSObject の - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait などを利用していた。 引数が0または1しか取れない、メソッドをわざわざ作る必要がある、など不便な点が多かった。引数増やすときは NSInvocation で回避できたが、やっぱり面倒だった。 GCD を使ったほうが簡単。 同期実行したいときは dispatch_async() の代わりに dispatch_sync() を使う。 Main thread から dispatch_sync で main queue に突っ込もうとすると誰も処理できずに詰まるので注意。 どの thread から呼ばれるかわからない場合は自分がどの thread にいるかチェックする。 (もっと良