2010年5月4日火曜日

メソッド呼出し

以下の様にプロトタイプ宣言されたクラスがあるとします。

@interface testClass : NSObject {
}
- (void) testMethod : (int) param1 param2 : (int)p2;
@end

ここでちょっと注意点があります。
ほぼ全てのクラスは「NSObject」クラスを継承させます。
「NSObject」クラスは、全てのクラスのスーパークラスとなるものです。
「NSObject」の「NS」とは、UNIXの「Next Step」の「NS」だそうです。
Objective-CはUNIXのNext Stepから派生した開発言語です。
ちなみに、クラスのメソッド宣言はクラス宣言({}(ブレス))の外側に宣言することも注意点でしょうか。

このクラスをインスタンス生成するには、以下の様に書きます。

testClass* tc = [[ testClass alloc] init];

また、インスタンスのメソッドを呼出すには以下の様に書きます。

[tc testMethod:1 param2:2];

C、C++、C#と比べるとかなり違いますね。

メソッドを呼び出す時は、大括弧([])で囲みます。
C、C++、C#言語では「->」または「.」を使っていたのでかなり違和感がありますが、これもUNIXのNext Stepから来ているものです。

「[testClass alloc]」でインスタンス生成用のメモリ割当を行うメソッドを呼出し、続く「init」で初期化メソッドを呼出します。
「alloc」も「init」もスーパークラスである「NSObject」内で定義されています。
 その結果を「testClass* tc = ・・・」でクラスのインスタンスポインタ「tc」に取得します。
後は、取得したインスタンスポインタ「tc」からtestMethodを呼出すために、「[tc testMethod:1 param2:2]」とします。
「testMethod:1 param2:2」の「:1」の部分は、1番目の引数を指定している部分で、「 param2:2」が2番目の引数を指定している部分です。
1番目の引数はメソッド名の直後に「:(コロン)」を書いて指定し、2番目の引数は「引数の説明:」に続けて指定しています。

メソッド呼出しを「[]大括弧」で囲む所とか、引数の指定方法が大分違うので最初は戸惑いそうですが、慣れると大丈夫そうかな?

0 件のコメント:

コメントを投稿