2012-08-02 88 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