Objective-C中的方法语法澄清

时间:2013-09-12 13:15:39

标签: ios objective-c methods syntax

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

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

我知道这个方法的每个部分意味着什么。我的查询是,“长度”,第二个参数的名称是可选的吗? 编译器是否将编译以下内容:

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

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

5 个答案:

答案 0 :(得分:2)

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

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

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

SEL(writeData::)

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

首先,(NSInteger *)不合适,因为NSInteger是原始类型。因此,您必须只使用NSInteger

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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