関数呼び出しとメッセージの大きな違いは、関数とその引数がコンパイル時にコードの中で結合されるのに対して、メッセージと受信側のオブジェクトはプログラムを実行してメッセージが送信されるまで結合されないこと。したがって、メッセージに応答するために呼び出される実際のメソッドは、コードのコンパイル時ではなく、実行時にのみ知ることができる。{}オブジェクトの中身を比較する場合はisEqual?を使う。//処理}↑Objective-C/ディレクティブObjective-Cで追加されている予約語は@から始まる。andHeight:(int)height;となる。setWidth:がメソッド名で、andHeight:の部分はラベルという扱い。andHeight:height];このへんの命名規則がどうも慣れない。文字列はNSStringで扱う。Hoge";文字列はstringWithString?とかで初期化。格納する内容によって、さまざまなNSStringのサブクラスが用意してあり、そのサブクラスは自動的に選択される。stringByAppendingPathComponent?:]とか)を行うと、内部的にはNSPathStore2?になったりする。NSDictionaryも@リテラルで書ける↑コレクションMutable~と付いて無いやつは内容の変更が不可。配列NSArrayやNSMutableArray?を使う。*huga;}//プロパティの宣言//メソッドの宣言//-がインスタンスメソッドで、//+がクラスメソッド。コンストラクタは存在しない。@end↑アクセッサObjective-Cでは、すべてのメンバ変数はprivate(参照できるけど・・)。メンバ変数にアクセスする場合はアクセッサ(getter、setter)を使う。setterはsetXXXgetterはXXX(get~にしない)とする。下記のプロパティを使って合成(自動実装)することがほとんど。↑プロパティ変数ごとにいちいちアクセッサかいてたら面倒なので、@propertyという仕組みが用意されている。2.0から@propertyや@synthesizeが導入された。プロパティを宣言すれば、アクセサメソッドとインスタンス変数が自動的に生成される特に指定しなければ、合成されるインスタンス変数の名前は、プロパティ名の先頭にアンダースコアを置いたものになる@interface@propertyでプロパティを宣言@implementationアクセッサをどうするか@synthesizeか@dynamicで指定@synthesize指示子にプロパティ名を指定すると、アクセッサメソッドを自動的に「合成」してくれるプロパティに対応するgetterメソッドとsetterメソッドのデフォルトの名前は、XXX,setXXX手動で実装するときは自分でXXX,setXXXを実装するコンパイル時にはアクセッサメソッドが存在しないが、実行時に動的にそれらが追加される、というケースに対応するために、@dynamicという指示子も用意されている。finished;↑ドット構文?アクセサメソッドの呼び出しを明示的に記述する代わりに、ドット構文を使ってもオブジェクトのプロパティにアクセスできる。オブジェクトに関して使用される場合、ドット構文は「構文上の便宜」であり、コンパイラによってアクセサメソッドの呼び出しに変換されます下記は同じ意味。value]);自分のクラスで定義しているプロパティはselfキーワードを使って参照する必要がある。プロパティとしてアクセスされる。HogeObject();//コンストラクタ↑メソッドの呼び出し方setHoge,hogeというのはメッセージ。実装されていなければ何も起きない。「任意のオブジェクトを参照するもの」として利用可能。コンパイル時にはクラスは確定していないので、クラスに存在するメソッドを利用しているかどうかのチェックは行われないことになる。(後述するプロトコルを使った場合、コンパイル時にメソッド利用の可否を確認できる。ようなクラスメソッドは生成と初期化を行う。このようなメソッドを「コンビニエンスコンストラクタ」と呼ぶ。(最近のドキュメントだとファクトリーメソッドと呼んでるっぽい)メソッド名は得られるデータの形式で始まる。NSImageのimageNamed?)↑カテゴリサブクラス化を行わずに既存のクラスの機能を拡張できる強力な機能クラス名の後に()を付けてカテゴリ名を指定する。//メソッドの実装@endNSStringなど、既存のクラスにカテゴリを追加して拡張することも可能。→サブクラス化よりお手軽カテゴリ独自のインスタンス変数は宣言できない。↑プロトコルオブジェクトの振る舞いを表すメソッドの集合を定義@protocolという指示子で宣言。クラスの宣言時にプロトコルを指定することにより、オブジェクトの振る舞いが分かりやすくなるプロトコルが指定してあるのにメソッドが足りないとコンパイル時にエラーが出るプロセス間通信(ドラッグ&ドロップとか)のときに便利conformsToProtocol?:で、あるオブジェクトがプロトコルに適合しているかどうかを実行中に調べることもできる。@endカテゴリのことを非形式プロトコル、@protocolのことを形式プロトコルと呼ぶこともある↑クラスクラスタNSStringなどのクラスは、フレームワーク内ではさらにそのサブクラスが定義されていて実際にはそのクラスのインスタンスが作られる。した複数の隠れたクラスが生成されるようなクラスを「クラスクラスタ」と呼んでいる。↑セレクタメソッドを示す変数。メソッドを指定するために使う。オブジェクトはメッセージを受け取り、該当するセレクタが存在すればそのセレクタのメソッドを実行する。メソッドを宣言すると、同名のセレクタが有効になる。}メソッドの呼び出しは直接行ってもいいし、セレクタを指定して呼び出すこともできる。performSelector:@selector(name)];IMP型(関数へのポインタ)を利用すると、セレクタを介さずに直接関数を呼び出すことができる。設計MVCモデルドキュメントアーキテクチャNSDocument↑イベントの処理イベントの処理方法にはたぶん3種類ある。Editorを使ってコードと結びつける。(IBOutlet)クラスからIB上のGUI部品を指定するときに使う。textField;みたいな感じで宣言。textFiledをウィンドウ上のどの部品と結び付けるかはIBで右ドラッグ。(IBAction)アクション=イベントの通知GUIによって呼び出されるメソッドのこと。-(IBAction)someAction:(id)sender;と言う感じで宣言。Builderでいじくるファイル。IBのインスタンスウィンドウに表示されるアイコン(クラス)は、アプリケーションが起動され"MainMenu?.nib"ファイルが読み込まれた時にインスタンスが生成される。起動時にNSApplicationによってawakeFromNib関数が呼び出される。順で処理される↑ダイアログの表示NSRunAlertPanelというCocoaの関数を使う↑クラスオブジェクトすべてのオブジェクトは自分のクラスに関する情報をメタ情報として持っており、これをクラスオブジェクトという形で取得可能。}Objective-Cのクラス(objc_class)は、結局のところC言語の構造体。objc_class*)cls)->name);みたいにして、クラスのフィールドにアクセス可能。採用された新しい形式で保存し読み込みをするテキストデータおよびバイナリデータをバイアリデータとして保存し読み込みをするという3つのファイル入出力形式が用意されている。2.0という名称で言語仕様の変更を行った。Extensionsランタイム構造の変更クラスのposingは廃止された。その代わりにメソッドの交換(セレクタのマッピングを入れ替える)が公式に用意され、カテゴリと組み合わせることでほぼ同じ機能を実現できる。