2009/01/22

[Objective-c]ラベルという概念について

今、こちらのサイトで、Objective-C 2.0の仕様書を読んでいるのですが、その中で、メソッド定義に関して、どうも慣れない点が。

それは、ラベルという概念なんだけど、Javaの場合、クラスとメソッドの定義はすごくおおざっぱに書いてしまうと、

class hoge{
void foo(任意の型 arg1, 任意の型 arg2){

}
}

であるのに対して、Objective-cでは同じことを書こうとすると、

@interface  hoge{

}
(void) foo:(任意の型)arg1 lrabel:(任意の型):arg2;

となるみたいです。

この辺は、どーやらC++とも違うみたいで、メソッドにアクセスするときも
hoge *hoge_instance;
[hoge_instance foo:引数1 lrabel:引数2]

となり、しかも、メソッドの名前も「foo」ではなく、「foo:lrabel:」となってしまうみたいです。

これがどーしても納得できないんですよね。

例えば、ラベルを使わずに、
hoge *hoge_instance;
[hoge_instance foo:引数1 :引数2]

と表したり、
hoge *hoge_instance;
[hoge_instance foo:引数1,引数2]

と書いたりするなら納得できるのですが、実際、一個目の例はコンパイルしてもエラーや警告を発信しないみたいなのですが、同仕様書によると非推奨と記載されていました。

なので、やはりラベルを記載するみたいです。

したがって、引数が1つの場合は、単純にメソッド名は、fooとなり、複数の場合とでは、完全にメソッド名が違うみたい。

慣れるまで時間がかかりそうです。。。www

0 コメント:

コメントを投稿