2010-12-19

「詳解 Objective-C 2.0」の改訂版が出た

詳解 Objective-C 2.0 改訂版
荻原 剛志
ソフトバンククリエイティブ ( 2010-12-17 )
ISBN: 9784797361780

荻原(2.0)本の改訂版が出た。「はじめに」に書かれている主な更新点は以下の 5 つ。

  • ブロックオブジェクトの章を新設 (→ CHAPTER 14)
  • 並列処理に関する記述を一新 (→ CHAPTER 19)
  • iOS に関する記述を充実 (→ 07-03 等)
  • Core Foundation の概要を追加 (→ APPENDIX B)
  • NSURL に関する記述を充実 (→ 08-07)

大きな変化は Snow Leopard で導入されたブロックオブジェクトと GCD に関する解説が追加されたことだろう。これら新しい並列処理機能に興味があるかどうかが、旧版を持っているプログラマが新版を買うかどうかの目安になるか。

目次

今後の参照のため、目次を引き写しておく。章立てレベルで目に付く旧版との差異は「CHAPTER 14 ブロックオブジェクト」が追加されたことと、旧版での「CHAPTER 18 スレッド」と「CHAPTER 19 分散オブジェクトが新版では「CHAPTER 19 並列プログラミング」に統合されたこと、そして「APPENDIX B CoreFoundation フレームワークの概要」が追加されたこと。

  • CHAPTER 01 オブジェクトに基づくソフトウェアの作成
  • CHAPTER 02 Objective-C のプログラム
  • CHAPTER 03 継承とクラス
  • CHAPTER 04 オブジェクトの型と動的結合
  • CHAPTER 05 リファレンスカウンタを用いたメモリ管理方式
  • CHAPTER 06 ガーベジコレクション
  • CHAPTER 07 NSObjectクラスとランタイムシステム
  • CHAPTER 08 Foundation フレームワークの重要なクラス
  • CHAPTER 09 カテゴリ
  • CHAPTER 10 抽象クラスとクラスクラスタ
  • CHAPTER 11 プロトコル
  • CHAPTER 12 宣言プロパティとアクセサ
  • CHAPTER 13 オブジェクトのコピーと保存
  • CHAPTER 14 ブロックオブジェクト
  • CHAPTER 15 メッセージ送信のパターン
  • CHAPTER 16 アプリケーションの構造
  • CHAPTER 17 例題: 簡易画像ビューア
  • CHAPTER 18 例外とエラー
  • CHAPTER 19 並列プログラミング
  • CHAPTER 20 キー値コーディング
  • APPENDIX A Foundationフレームワークの概要
  • APPENDIX B CoreFoundation フレームワークの概要
  • APPENDIX C コーディングの指針

ブロックオブジェクト

新設された「CHAPTER 14 ブロックオブジェクト」をざっと読んでみた。まずは章の冒頭部分から引用。

(「詳解 Objective-C 2.0 改訂版」p.322 より)
ブロックオブジェクト (block object) は、Mac OS X 10.6 (Snow Leopard) および iOS 4.0 で利用できるようになった機能で、Objective-C ではなく、C 言語の機能として実装されています。 [...snip...] 他のプログラミング言語ではクロージャ (closure) として知られている言語機能に相当します。

ブロックってクロージャだったのか。それは知らなかったよ。

(「詳解 Objective-C 2.0 改訂版」p.327 より)
どうやら、ブロックオブジェクトは、そのブロックリテラルが記述された位置での自動変数の値を保存しているようです。

なるほど、これなら確かにクロージャだ。これがなければただの関数ポインタになってしまうよな。

この章の前半は、ブロックオブジェクトの使い方と実現のための仕組みの簡単な紹介になっている。仕組みについては、ブロックオブジェクトがスタック上に確保されることの説明があるが、これはブロックを理解するめの基本と言えそうだ。「クロージャはオブジェクトの裏返し」と言われる意味が、この説明を読んで理解できた。

また、後半では、ブロックオブジェクト(という名のクロージャ)の Cocoa アプリでの使用例として、コレクションクラス(配列や辞書)に追加されたブロック対応のメソッドを使ったソートと検索の方法と、シート(パネルの一種でウィンドウにくっついているもの)のデリゲートの置き換えとして使う方法が紹介されている。前者は、ブロックを for (item in collection) の裏返しとして使う方法ってところか。ループの中に記述するコードをクロージャとしてコレクションクラスに適用するもの。

そう言えば、GData ライブラリの実装でも(利用可能なら)ブロックを使うようになっていたな。CHAPTER 19 の並列プログラミングとあわせてじっくり読んでみるか。

参考文献

詳解 Objective-C 2.0
荻原 剛志
ソフトバンククリエイティブ ( 2008-05-28 )
ISBN: 9784797346800

こちらは旧版。これまでこのブログでは「荻原(2.0)本」として何度も参照してきた。旧版についても目次を写してある(→「荻原(2.0)本」)

関連リンク

関連記事

0 件のコメント:

コメントを投稿