Objective-C/オブジェクトの扱い方

Objective-C/オブジェクトの扱い方

クラスに関しては→こちら

バージョンと製造年月日

2012-03-09

生成されたオブジェクトの格納

オブジェクトを入れる専用のidという型がある。

id hoge;

なんかオブジェクトはなんでもこの型にはいるらしい

オブジェクトの生成

つまりほかの言語ならばnewにあたる処理。 Objective-Cではクラスオブジェクトのallocメソッドを呼び出して生成する。

[ Hoge alloc ];

構文としてこうなのかクラスの静的メソッド呼び出しなのかはわからんがこうなっている。

作成と初期化が分離して実装されているので・・・

[ [Hoge alloc] init ];

このように生成と初期化をチェーンして書くのが普通。 初期化メソッドは慣例的に大体initで、内部的にはNSObjcetのinitまでチェーンしてオブジェクトが生成される。

メソッド呼び出し

Objective-Cではオブジェクトのメソッドを呼ぶことをメッセージと言う。 ややこしいがメソッドは実装そのものでメッセージはそれを呼ぶ行為ということみたいだ。知るか!

hoge変数の中に入っているオブジェクトのpiyoメソッドを呼ぶ。つまり実行するには、

[ hoge piyo ];

と書く・・・キモくて読みにくいことこの上なし。

引数を取るメソッド呼び出し

piyoメソッドに引数1を1個与えて呼び出すならこうなる。

[ hoge piyo : 1 ];

コロンに続いて引数を書く

2個引数を与えたい時は

[ hoge piyo : 1 : 2 ];

このようにコロンでセパレートしてズラズラ書く

ラベル付き引数によるメッセージ呼び出し

ラベル付き引数と書いたが、概念的には違うっぽくて、変数にラベルを付けるのではなく、 Javaの引数違いによる自動的なメソッド選択であるオーバーロードをメソッド名に練り込んでしまおうという発想のようだ。

Javaでも結局ポリモフィズムを使ってもメソッド名に引数を表すものが入るなら

Hoge a = hoge.findByHogeIdAndPiyoId(123, 456);

のようになるね。

これをObjective-C風に書き換えると・・・

Hoge a = [ hoge findByHoge:123 piyoId:456 ];

このようにfindByHogeが第一引数で基本挙動をしてさらに追加オプションでpiyoIdを取るというメソッドになるという考え方のようだ。

同じfindByHogeでもpiyoIdのが付くことによって別のメソッドとして扱われる。なのでこのpiyoIdみたいなラベルをセレクタと呼ぶ。

タグ

objectivec/how_to_handle_object.txt · 最終更新: 2012-03-09 10:56 by ore