メソッドの宣言。
文法から書きますと、
インスタンスメソッドの場合
- (返り値型)メソッド名; - (返り値型)メソッド名:(引数型)引数名; クラスメソッド + (返り値型)メソッド名; + (返り血型)メソッド名:(引数型)引数名;
何やら-とか+とかコロンとか色々複雑そうですが、宣言の並びはC++と同じです。
返り値型、メソッド名、引数型、引数名という順序は。
インスタンスメソッドとクラスメソッドの違いは、マイナス記号で始まるかプラス記号で始まるか。この一点だけです。
インスタンスメソッドが-(マイナス)、クラスメソッドが+(プラス) です。
覚え違いのないように。
さて、上記の文法は上から 引数がない場合と引数が1つの場合です。
では2つ以上ある場合はどうするか、以下の通りになります。
例:引数が二つの場合。 -(返り値型)メソッド名:(引数型)引数名 <span style="color:#CC0000;">ラベル</span>:(引数型)引数名;
一つ目までは、前と同じです。そしてその後ろにまず、空白。そして、ラベル。その後にコロン、括弧して引数型、引数名。
ここで、メソッド名の代わりにラベルというものができました。
これは後に続く引数を説明するものです。
ラベルはメソッド名の一部ということになります。OCではメソッドの正式な名前は、メソッド名とラベルを合わせた物になります。
例えば、
-(void)test1:(int)a test2:(int)b;
これだと、メソッド名が test1 二つ目の引数のラベル名が test2となっています。
しかし、メソッド名の正式名称は「test1:test2:」となります。コロンも忘れずに。
メソッドの宣言ではコロンの後に引数が来ます。そのため、コロンの数と引数の数は同じになる訳です。
さらに引数が増えると「ラベル:(引数型)引数名」が後ろに増えていくことになります。
もうこのあたりで、今までの言語の常識とは違いますねww
しかし、この書き方はパッとソースコードを見たときに処理の内容が分かりやすくなっています。明らか面倒ですが(笑