WEB+DB PRESS Vol.79のiOS7特集を読んだ

iOS7特集と題しつつも、iOSの一般的なことにも触れている。特に、実機へのインストールやPUSH通知についての説明がうれしい。全体的には、iOS開発のチュートリアルを何か一つ終えたあたりに読むと良さそうだ。

ところで、特集内ではバックグラウンドスレッドからメインスレッドに処理を渡すときに [NSObject -performSelectorOnMainThread:withObject:waitUntilDone] を使っているが、これはGCDのほうがいいんじゃないだろうか。

たとえばperformSelectorOnMainThreadだと以下のようになるコードがあるとする:

 [self performSelectorOnMainThread:@selector(foo:) withObject:@"baz" waitUntilDone:NO];

それが、GCDを使うと以下のようになる:

dispatch_async(dispatch_get_main_queue(), ^{
    [self foo:@"baz"];
});

GCDを使うメリットは3つある。

  • GCDのほうがコードが短く、書きやすいし読みやすい
  • performSelectorOnMainThread は引数が0個ないし1個のメソッドしか呼び出せないが、、GCDはブロック単位でスレッドを切り替えるので任意のコードを実行できる
  • performSelectorOnMainThreadに限らないが、selectorを渡して実行するメソッドは動的メソッド呼び出しをするため、コンパイル時に妥当性をチェックできないうえリファクタもしにくい。一方GCDのブロックは静的チェックの対象にでき、リファクタも可能。

一方で、performSelectorOnMainThreadを使うメリットは特にないと思う。

なお、WEB+DB PRESS Vol.79 は技評社からいただきました。ありがとうございます。

WEB+DB PRESS Vol.79

WEB+DB PRESS Vol.79

  • 作者: 成瀬ゆい,そらは(福森匠大),西磨翁,小川航佑,佐藤新悟,塚越啓介,藤原亮,堀哲也,田村孝文,桑野章弘,松浦隼人,中村俊之,田中哲,福永亘,杉山仁則,伊藤直也,登尾徳誠,近藤宇智朗,若原祥正,松木雅幸,奥野幹也,後藤秀宣,羽二生厚美,笹田耕一,平河正博,東舘智浩,渡邊恵太,中島聡,A-Listers,はまちや2,川添貴生,山田育矢,伊藤友隆,村田賢太,まつもとゆきひろ,佐野岳人,山口恭兵,千葉俊輝,平松亮介,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2014/02/22
  • メディア: 大型本
  • この商品を含むブログ (5件) を見る