2008-12-20

荻原(2.0)本

追記@2010-12-19

2010年12月に改訂版が出た。改訂版の目次も引き写しておいたので、以下を参照のこと。

何度も言及しているので、目次だけでも参照できるように書き込んでおく。

詳解 Objective-C 2.0 ([著]荻原剛志, [版]SoftBank Creative)

詳解 Objective-C 2.0
荻原 剛志
ソフトバンククリエイティブ ( 2008-05-28 )
ISBN: 9784797346800
  • 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: コーディングの指針

ゾーンについて調べてみた

ヒレガス本を読んでいた。ちょっと気になることがあって ADC Documents の中の "Cocoa Fundamentals Guide" を開いた。そこで、"zone" という言葉に出会う。「ああ、そう言えば "allocWithZone" とか見たことあるな。ゾーンって何(・ω・)?」と思ったので、荻原(2.0)本を開いた。「CHAPTER 13. オブジェクトのコピーと保存」の最初にゾーンの解説が載っている。軽く引用してみる:

(p.304)
Cocoa では、動的に確保されるメモリの管理をゾーン(zone)と呼ばれる領域を使って行います。(・・・中略・・・) メモリ空間にいくつかのヒープを設けて、関係の深いデータやオブジェクトは特定のヒープからメモリが割り当てられるようにします。このようにすると、空間的な局所参照性を生かした効率的なメモリアクセスを実現できると期待されます。

ページフォールトを避けたい、ってこと何だろうねえ。何というか、C の時代に戻ったような気がするよ。と思いつつ先を読み進むと・・・

(p.305)
Apple社のドキュメントでは、通常はデフォルトゾーンだけの利用で十分な実行効率が得られるとされており、(・・・中略・・・) さらに、ガーベジコレクションを利用した場合には、オブジェクトを生成する時にゾーンを指定することができません。

ええええ??

しょうがない、英語と格闘するか。と ADC Documents にもどって、ゾーンに関する記述を探した。荻原(2.0)本には "Objective-C 2.0 Runtime Reference"、"Memory Management Programming Guide for Cocoa" の名前が挙がっている。

"Memory Management Programming Guide for Cocoa" にこう書いてあった。

Zones are page-aligned areas of memory that hold the objects and data allocated by an application. (・・・中略・・・) In most circumstances, using the default zone is faster and more efficient than creating a separate zone.

(・・・中略・・・) For example, allocating a group of related objects in the same zone co-locates those objects in the same area of memory. If a page fault occurs when trying to access one of the objects, loading the page brings in all of the related objects, which could significantly reduce the number of future page faults.

たいていはデフォルト(ランタイムシステムが自動的に割り当てるゾーン)だけで十分だ。一方で、独立したゾーンを使うと、メモリのフットプリントが大きくなる代わりに、ページフォールトが減らせるかもよ、とも書いてある。

"Garbage Collection Programming Guide" では、つぎの一文を発見。

You cannot allocate objects in separate zones—all Cocoa objects must be allocated in a single managed heap. If your application is running in garbage collection mode, the zone parameter in NSAllocateObject is ignored.

GCが有効だと、ゾーンを指定しても無視される、と。

まとめてみよう・・・。Mac で、それも Leopard 以降だけをプラットフォームとするなら、GC を使えるし、使いたいだろう。その場合、ゾーンのことは忘れて OK。けど、iPhone OS では GC は使えない。しかもメモリやパフォーマンスはシビアなプラットフォームだから、ゾーンを使ったプログラミングが関係してくるかもしれない。

2008-12-14

"Beginning iPhone Development" が届いた

今日、Amazon から届いた。

表紙の輪切りフルーツは何? 裏表紙を見ると関連するタイトルで同様の柑橘系フルーツの輪切り写真が使われていて、レモン、ライム、オレンジのように見える。とすると、この iPhone のやつは・・・。

それはさておき、まずは目次。

  • CHAPTER 1 Welcome to the Jungle
  • CHAPTER 2 Appeasing the Tiki Gods
  • CHAPTER 3 Handling Basic Interaction
  • CHAPTER 4 More User Interface Fun
  • CHAPTER 5 Autorotation and Autosizing
  • CHAPTER 6 Multiview Applications
  • CHAPTER 7 Tab Bars and Pickers
  • CHAPTER 8 Introduction to Table Views
  • CHAPTER 9 Navigation Controllers and Table Views
  • CHAPTER 10 Application Settings and User Defaults
  • CHAPTER 11 Basic Data Persistence
  • CHAPTER 12 Drawing with Quartz and OpenGL
  • CHAPTER 13 Tabs, Touches, and Gestures
  • CHAPTER 14 Where Am I? Finding Your Way with Core Location
  • CHAPTER 15 Whee!
  • CHAPTER 16 iPhone Camera and Photo Library
  • CHAPTER 17 Application Localization
  • CHAPTER 18 Where to Next?

2008-12-13

iPhone SDK (OS 2.2用) にアップデート

MacBookの方の Xcode、っていうか iPhone SDK をアップデート。iPhone OS 2.2 対応のもの。Xcode は 3.1.2。インストールにかかった時間は約10分。

送信者 iPhoneをプログラミング