考虑下面的原型,这是一个常见的原型,
-(void)writeData:(NSData *)data length:(NSInteger *)len;
我知道这个方法的每个部分意味着什么。我的查询是,“长度”,第二个参数的名称是可选的吗? 编译器是否将编译以下内容:
-(void)writeData:(NSData *)data :(NSInteger *)len;
* 编辑: *感谢您的所有回复:)
答案 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中使用“匿名”参数...事实上这是我最喜欢的语言之一。