最近スクリプト言語ばっかり使っていたので、Objective-C特有のキーワードがワケワカメ!
更にはObjective-C2.0になって新しいキーワードまで増えてしまって、ますます(@_@;)
と、いうわけで、覚え書き
まずは、ヘッダーファイル。拡張子はC/C++と同じく.h
@interface “class” { “instance” } “[+class|-instance] method” @property “instance” @end
続いて本文。拡張子が.mなのが、慣れるまでキモチワルイ。
@implementation “class”[ : “super”] @synthesize “instance” “methods” @end
こんな感じ。
ざっくり見渡してみると、インスタンス変数が「{}」の中に列挙されることで、クラス(定義)が「俺は構造体だよ」と、強く主張しているのがよくわかる。
まずはクラス定義、クラス宣言文が@imprementeationと思っておけば、まあ・・・
クラス継承でクラスを拡張する際は、「:」の後ろに継承したいクラスの名前を書く。この辺は接続記号が多少違う程度で他の言語と一緒。
続いてインスタンス変数宣言。
先にも書いたとおり、オブジェクト指向言語が、構造体とその構造特有の関数のラッピング/パッケージ化である以上、
クラス=データ構造体なのは理解して貰えると思います。
なので、Cのstruct宣言のように「{}」の中身にはそのクラスが保持する変数群を列挙するのは当たり前。と思っておけば、違和感も多少は少なくなる・・・かな?
続いて、行頭に「+」が来るメソッド(関数)宣言がクラスメソッド。
これはあるインスタンスオブジェクトに対してではなく、インスタンスに対するメッセージとして実行「されない」メソッドを表す。
コンストラクターやインスタンスの生成に使われるメソッドと思っておけばオッケーかな?
続いて、行頭に「-」が来るメソッド(関数)宣言がインスタンスメソッド。
これは実体を持つインスタンスに対するメッセージとして実行「される」メソッドを表す。
@propertyはObjective-C2.0で新しく登場したキーワードで、アクセッサーを自動生成してくれると思えばいい(ハズ)
先の「{}」内で宣言したクラスが持つインスタンスに対し、.hファイルで@propertyを、.mファイルで@synthsyzeを宣言しておくと、setterとgetterアクション生成を自動で行ってくれる。
なので、aaaというインスタンスを生成して、その値をクラスの利用者が読み書きしようと思ったら、
[instance set<メンバー名>:値];
val = [instance <メンバー名>];
を、定義しなくてもObjective-Cが、上記の動作を勝手に行ってくれる。
便利だね。