BlocksとGCDを学ぶ本「iOS4プログラミングブック」

ソフトウェア開発者側から見てiOS 4の最も興味深い技術の一つはBlocksとGrand Central Dispatch (GCD) だと思う。マルチスレッド処理はソフトのユーザ側には便利な仕組みなのだけど、その反面、作り手側の負荷が少なくない。iOS 4より前のOSでは、NSThreadのような「機能が貧弱で役不足なもの」か,pthreadのような「高機能だけど使いこなすのが大変なもの」しか用意されていなかった。

iOS 4ではこのマルチスレッドをサポートするための仕組みが強化されており、BlocksとGCDの組み合わせを利用することで、既存のコードの変更を抑えたまま簡単にマルチスレッド対応にすることが可能だ。例えば、「通信で取得したデータをTableViewに表示する」という良く有るアプリケーションの構成において、GCD利用の有無を比較したコードの例が下記で説明されている。

通常、スレッドプログラムでは各スレッドの同期や、共有リソース(変数)の排他制御はたいへんです、どのくら大変なのかは Java並行処理プログラミング ―その「基盤」と「最新API」を究める― を眺めると解ります ^^;
iOSではNSOperationを使うかなり楽に書けるようになりますが、スレッドを使わないコードからの書き換え量はかなりあります。
しかし、GCDを使うと利用者にストレスを与えない反応の良いアプリを、簡単に安全に作る事ができます!

Grand Central Dispatchで楽々マルチスレッド iPhoneプログラミング - yuumi3のお仕事日記

コードのアウトラインは下記のようになる。何か重い処理をキューに放り込み、その処理が終わり次第GUIに結果を反映させる、という一連の処理が非常に見通し良く書けることが分かる。開発者にとっては実現する機能もさることながら、如何に簡潔で分かりやすいコードになるか?という点もフレームワーク利用の可否を決める判断材料になるが、このBlocksとGCDはその目的を上手く実現しているフレームワークだと思う。

- (void)foo
{
	dispatch_async(queue, ^{

		// Do heavy task in a sub thread.

		dispatch_async(dispatch_get_main_queue(), ^{

			// Update the view in the main thread.

		});
	});    
}

書籍「iOS4プログラミングブック」にはその詳しい解説が載っていた。使い方がよく分かっていなかったAPIに関する説明も載っており大変参考になった。広告配信(iAd)やマルチメディア(AV Foundation)など説明も良いけれど、この書籍の一番のオススメはやっぱりBlocksやGCDだろう。その辺りの機能を使う開発者には必須の内容だと思う。

iOS4プログラミングブック

iOS4プログラミングブック

なお、BlocksについてはAppleから日本語訳の資料も公開されている。

Blocksプログラミングトピックス

日本語ドキュメント - Apple Developer



関連