堅っ苦しくて分かりづらいね。Objective-C 2.0プログラミング言語 ドキュメント

サンプルプログラムに一通り手をつけて、さて今度こそ、
ということでもう一度読み直しました。
日本語ドキュメント - Apple Developer

プロパティ @dynamic
動的にアクセサメソッドを追加するための文法
[参考]http://journal.mycom.co.jp/column/objc/102/index.html

実際にソースコードを書いてみると、@synthesizeを使うと比較的丁寧にエラーや警告を出してくれる。対応するインスタンス変数のチェックや、属性が適切かどうかなどを判断してくれる。だが@dynamicを使うと、動的に確認することになるので、コンパイル時のチェックはほとんどすっ飛ばされることになる。これでは台なしのような気もするが、Objective-Cらしいと言えば、その通りだろう。

retain,nonatomicの使用セオリー
[参考]iPhoneアプリケーション開発: Objective-Cのプロパティについて

iPhoneアプリケーションの場合、普通の変数についてはnonatomicとassignを、 自分で使うビューやラベル、配列、ディクショナリーなどにはnonatomicとretainを、文字列やデータなどにはnonatomicとcopyを設定するようです。

アトミック・非アトミック
iPhoneの場合アトミックにするとロックを使用するためパフォーマンスに影響あり。
よって基本的にnonatomicを使う(?)

メッセージ=「通信」
[参考]http://www16.ocn.ne.jp/~maccocoa/objective_c/primer/primer1_non_ie.html

C++というオブジェクト指向言語では「メンバ関数の呼び出し」と呼びます。
C++の関数呼び出しの場合は、プログラムの実行前から呼び出す関数が間違いなく存在しているかどうかチェックされます。そしてもし存在していなければプログラムは元から完成されません。ですが、Objective-Cのメッセージの場合は、そのメッセージを受けるオブジェクトに、対応する処理や操作(Objective-Cの場合にはこれをメソッドと呼びます)が存在するかどうかはチェックされていません。
プログラム実行時にメッセージを受けたオブジェクトに対応するメソッドが存在しない場合は、そのプラグラムは強制終了してしまいます。


[参考]http://journal.mycom.co.jp/column/objc/023/index.html

まず、受信オブジェクト、つまりobjc_msgSendの第一引数として渡ってきたオブジェクトが、nilかどうかをチェックする。nilの場合は、 LMsgSendNilSlefというラベルに飛び、nilを返して実行は終了する。

nilではない場合は、LMsgSendReceiverOkというラベルに進む。メッセージを送信するためにIMPを探すのだが、まずここでキャッシュから探す事になる。キャッシュは、第一引数のオブジェクトから得られる。この検索を行うのが、CacheLookupというマクロだ。

無事にIMPが見つかれば、呼び出しを行う。見つからない場合、つまりキャッシュミスが起こった場合は、次に進む。LMsgSendCacheMissというラベルだ。ここでは、メソッドテーブルからIMPの検索を行うために、MethodTableLookupというマクロを呼び出す。ここが、いちばん時間のかかる処理になるだろう。

そして、IMPを無事見つける事ができたら、それをキャッシュしておき、最後にIMPを実行する。これで、メッセージ送信の完了だ。

allocとallocWithZone
alloc=allocWithZone:NULL
アロケートは「確保する」の意味。メモリを確保すること。
[参考]oomori.com - このウェブサイトは販売用です! -&nbspoomori リソースおよび情報
http://homepage.mac.com/mkino2////////spec/optimize/allocation.html

alloc っていうのは allocWithZone:NULL といっしょなんだ。

ポインタ
なるほど、シンプルでわかりやすかった!
[参照]ポインタ

isa変数
isa変数はポインタ・・・じゃあポインタでいいじゃん;
表現にも世界標準を作ってくれないものだろうか。
[参照]Objective-C

isa変数は作成されたオブジェクトのクラス構造情報へのポインタである.クラス構造情報とは,クラス内のインスタンス変数の型と名前を持つと当時にメソッドの実装をも持つ.さらに,クラス構造情報には親クラスのクラス構造情報へのポインタも持つ.

[参照]http://journal.mycom.co.jp/column/objc/016/index.html

isaの意味は、「このオブジェクトの定義となるオブジェクト」ということになる。たとえば、オブジェクトAのisaがオブジェクトBである場合、オブジェクトAの定義はオブジェクトB。つまり、"ObjectA is an ObjectB"と、考えればいい。

File's Owner
[参照]http://journal.mycom.co.jp/column/objc/011/index.html

File's Ownerと呼ばれるインスタンスを含む。これは、nibファイル上のオブジェクトと、外部のオブジェクトをつなぐ、窓口となるものだ。

デリゲート
[参照]http://journal.mycom.co.jp/column/objc/010/index.html

あるクラスの動作の「判断」を、外部のオブジェクトにゆだねるための機構だ

プロトコル
[参照]http://journal.mycom.co.jp/column/objc/009/index.html

カテゴリ
[参照]http://journal.mycom.co.jp/column/objc/008/index.html

メタ
[参照]メタとは - IT用語辞典 e-Words

id型
[参照]http://journal.mycom.co.jp/column/objc/017/index.html

id型とは、構造体objc_objectのポインタ型であることが分かる。この構造体は、フィールドを1つだけ持っている。class型であるisa だ。
--中略--
「クラスもオブジェクトである」というObjective-Cの言語仕様は、「id型も、Class型も、クラス定義であるisaで始まる」と、実装面からも確認できるということだ。ちなみに、クラスオブジェクトにはクラス変数は存在しないので、objc_class構造体に変数用の可変長領域は必要ない。

では、構造体で先頭にisaがあれば、何でもオブジェクトなのか? まさに、その通りである。たとえば、C言語で構造体を作り、その先頭にisaとしてクラス定義へのポインタを置けば、それでもうObjective-Cのオブジェクトになる。

メソッド、セレクタ、ソッドの実装
[参照]http://journal.mycom.co.jp/column/objc/018/index.html

--前略--
メソッドとは、methodAに関する情報を管理する構造体だと考えて欲しい。クラスはメソッドの集合を管理する。
メソッドの名前となるのが、セレクタだ。セレクタ自体は、文字列と考えてしまって問題ない。
--中略--
int i; for (i = 0; ...) といったコードをコンパイルしたものは、バイトコードとして、メソッドとは別のところに置かれる。これが、メソッドの実装だ。メソッドは、メソッドの実装を、C言語関数のポインタとして持っている。

self
[参照]http://journal.mycom.co.jp/column/objc/022/index.html

Objective-Cでは、selfはメソッドに渡される局所変数にすぎない

インスタンスメソッドとクラスメソッド
[参照]Objective-Cのクラス定義を理解しよう (2/3):Cocoaの素、Objective-Cを知ろう(3) - @IT

 先頭に-(マイナス)が付加されたメソッドは、クラスのインスタンスがあって初めて実行できるメソッドで、「インスタンスメソッド」と呼ばれます。通常、ほとんどのメソッドはインスタンスメソッドとして定義することになります。

 一方、先頭の記号が「+(プラス)」となるメソッドもあります。これは、クラスのインスタンスを生成せずに、クラスの型から直接実行することが可能な「クラスメソッド」と呼ばれるメソッドです。