読者です 読者をやめる 読者になる 読者になる

#17「並列処理はGCD! 」tech.kayac.com Advent Calendar 2012

ios AdventCalendar2012 objective-c

はじめまして!iOSのプログラム書いたり、perlを書いたりと色々している@Maco_Tasuです。

このエントリは tech.kayac.com Advent Calendar 2012 の17日目の記事です。

この2012年は、卒業制作関係でIllustratorを使ったり、企画をひたすら考えたりと多様多種に渡る仕事をした年だったなと思います。

今年のAdvent Calenderのテーマが「私の中のマイイノベーション」ということで、今年、今更ながら知ったGCDについてご紹介したいと思います。

GCD

GCDとは正式名称が grand central dispatchというものでiOS4から導入されたマルチスレッドプログラミングを実現するための技術です。

このGCDが導入される以前からiOSではperformSelectorやNSThreadなどのマルチスレッドプログラミングの方法がもちろんありました。しかし、これらの方法を実現するには少し煩わしいと感じるようなコードを書かなければいけませんでした。

ですが、GCDでは次のコードだけでマルチスレッドプログラミングを実現できます。

dispatch_queue_t mainDispatchQueue = dispatch_get_main_queue();
dispatch_queue_t globalDispatchQueueDefault
  = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(globalDispatchQueueDefault, ^{
    //ここで長時間かかる処理・重い処理を記述

    dispatch_async(mainDispatchQueue, ^{
     //メインスレッドで実行させる処理

    });
});

このコードについて簡単に説明すると

dispatch_async(globalDispatchQueueDefault, ^{

このコードでバックグラウンドスレッドに処理を走らせて

dispatch_async(mainDispatchQueue, ^{

このコードでメインスレッドに処理を走らせています。

すごく簡単ですね!

このGCDを利用することでマルチスレッドを誰もが簡単に実装できるようになりました!

GCDを利用するシチューエーションはいくつも考えられますが

私の場合はバックグラウンドでサーバとの通信をし、メインスレッドでローディングを表示させる時などに使用しています。

adventCalender2012-12-17.PNGのサムネール画像

↑みたいな感じですね。

iOS4で導入されたこの技術をiOS6がでた今更になって騒ぎ始めてしまいましたが、なんだかんだ今年の私にとってイノベーティブな技術でした!

おまけ

私は卒業研究を2つしていてそのうちの1つで、仲間と共にmeglueという旅の思い出共有サービスを制作していました。 iPhone・Android共に2013/01/25に同時リリースですので、是非ダウンロードよろしくお願いします!

明日は

明日は@takihitoさんです!お楽しみに!