9

我发现在Objective C中声明方法的方式很奇怪。

.h 文件中的方法声明:

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

.m 文件中的方法实现:

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

我可以这样调用这个方法:

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

它会工作得很好。

我的问题是什么时候应该使用这种语法。它和通常的声明有什么区别吗?

4

2 回答 2

6

如此处所述,这些参数是可选的:

采用可变数量参数的方法也是可能的,尽管它们很少见。额外的参数在方法名称的末尾用逗号分隔。(与冒号不同,逗号不被视为名称的一部分。)在以下示例中,虚构的 makeGroup: 方法传递了一个必需参数(组)和三个可选参数:

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

所以是的,声明与通常的声明不同。除了使用可变参数方法(可选参数声明为....

于 2012-08-02T09:07:43.630 回答
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;

来自土耳其论坛的资源在这里

于 2012-08-02T09:00:01.857 回答