2012-08-02 22 views
9

目的C.奇妙な構文

-(void)methodName:(NSString *)str, int i 
{ 
    NSLog(@"str = %@, int = %d", str, i); 
} 

私はこのように、このメソッドを呼び出すことができます。

[self methodName:@"stringExample", 99]; 

それは正常に動作します。

私はそのような構文をいつ使うべきですか?それと通常の宣言との間に違いはありますか?

答えて

6

ありますhereは、これらのパラメータはオプションです:パラメータの可変数を取る

方法も可能で、 彼らはいくつかのだけれども何が珍しい。余分なパラメータは、メソッド名の最後の後にカンマで区切られます( )。 (コロンと異なり、コンマは名前のない 考慮される部分である。)以下の例では、仮想 makeGroup:

[receiver makeGroup:group, memberOne, memberTwo, memberThree];

:この方法は、1つの必須パラメータ(群)および任意の3つの パラメータを渡されます。

はい、宣言は通常の宣言とは異なります。私はvarargsメソッド以外のこのタイプの宣言を定期的に使用することはできません。オプションのパラメータは...と宣言されています。

1

-(void)methodName:(NSString *)str yourInt:(int) i{...}のような宣言方法の目的は、読みやすくするためです。 llvm 4.0宣言ストリング、アレイ、辞書..他のC言語のように扱うことができる後..例えば、以下の宣言の両者が真である:説明したようにトルコフォーラムから

//old style 
array = [nsarray arraywithobjects:a, b, c, nil]; 
dict = [nsdictionary dictionarywithobjects:@[o1, o2, o3] 
forkeys:@[k1, k2, k3]]; 
number = [nsnumber numberwithchar:'x']; 
number = [nsnumber numberwithint:12345]; 
//new style 
array = @[ a, b, c ]; 
dict = @{ k1 : o1, k2 : o2, k3 : o3 }; 
number = @'x'; 
number = @12345; 

リソースhere