インスタンスを生成するには、まず初期化です。おぎゃあ。
「オブジェクトを作ろう」の項で作ったHumanクラスを使って説明します。
Humanクラスのインスタンスを生成するには、こうします
Human *wada = [[Human alloc] init];
こうすると、新しく誕生したインスタンスへのポインタが、変数wadaに入ります。
この書き方、[ ]がなんだか入り組んでて複雑だと思ったひとー
3つのことを1行にまとめてるんですよこれは。
Human *wada;
wada = [Human alloc];
[wada init];
Humanクラスのインスタンスへのポインタを格納できる変数wadaを宣言し、
Humanクラスのインスタンスを1つ、メモリに割り当ててwadaに先頭アドレスを格納し、
そのインスタンスをイニシャライズ。
厳密に言うと、最後のやつの返り値がwadaに入るんですが、[Human alloc]で割り当てたアドレスと同じものを返すことになってるので
これで問題ないかと。
ぜんぜん意味が…。わかりません…。
むぅ!
Human *wada;
これはいいっすよね?
int i;
と同じ感じで。
NSString *s;
Cocoaが用意したクラスでも同様に。
クラス名 *変数名;
というかたちです。
この時点では、変数のタイプを宣言しただけで、まだインスタンスはできていません。
[Human alloc];
[クラス名 alloc];
これは説明してこなかったことですが、インスタンスを生み出すには、こうやるんです。
返り値として、インスタンスが割り当てられたメモリの先頭アドレスが返ってくるので、
wada = [Human alloc];
などと変数に入れておきます。これをしないと、二度と参照できなくなりますから。
そして最後の段階。できたてのインスタンスを、初期化します。
[wada init];
以上3つのステップは定型的なもので、しょっちゅうやることですから、次のように一気に書くのが習慣です。
Human *wada = [[Human alloc] init];
見慣れてくれば、なんかわかってきたような気に・・・なりませんか!
クラス名が長い場合などは、
Human *wada;
wada = [[Human alloc] init];
と2つに分けることもよくあります。