-1

考虑下面的原型,这是一个常见的原型,

-(void)writeData:(NSData *)data length:(NSInteger *)len;

我知道这种方法的每个部分的含义。我的问题是,“长度”,第二个参数的名称是否是可选的?编译器是否会编译以下内容:

-(void)writeData:(NSData *)data :(NSInteger *)len;

*编辑: *感谢您的所有回复:)

4

5 回答 5

2

如果您遗漏了第二个参数的名称标签,编译器不会抱怨(自己尝试一下,看看它是否有效)。

但是,在定义它的方法调用中它不是可选的。例如,您不能在length省略部分方法名称的情况下调用第一个方法。

另请注意,在为第二种方法制作选择器时,冒号不是可选的:

SEL(writeData::)
于 2013-09-12T13:18:30.187 回答
2

它会,但它被认为是不好的风格 - 基本上你违反了 Objective-C 命名约定。

第一种方法命名writeData:length:,第二种方法writeData::

于 2013-09-12T13:19:35.490 回答
2

首先,(NSInteger *)不好,因为NSInteger是原始类型。所以你必须只使用NSInteger.

此外,您的第二个syntax对于编译器来说是正确的,但对于人类来说是错误的。

于 2013-09-12T13:23:50.053 回答
1
-(void)writeData:(NSData *)data :(NSInteger *)len; 

是一个有效的objective-c方法(从编译器的角度来看它是不同writeData:length:的),但是命名所有方法参数会使代码更具可读性和更容易理解,所以你的第一个例子更可取

于 2013-09-12T13:18:22.797 回答
1

第二个是有效的,但未使用且描述性较差。在第一种情况下,方法名称是writeData:length:,我的意思是,“长度:”是方法名称的一部分。第二个方法名称是writeData::. 我从未见过在 ObjC 中使用“匿名”参数……事实上,这是我最喜欢该语言的东西之一。

于 2013-09-12T13:19:58.223 回答