2012-08-02 55 views
9

我發現了一個奇怪的是,我的方法來聲明一個方法,在Objective C.在.h文件中目的C.奇怪的語法

方法聲明:

-(void)methodName:(NSString *)str, int i; 

在.m文件的方法實現:

-(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

聲明方法的目的是:-(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