2012-11-21 58 views
4

我不知道这个语法是有效的。Bizzare方法签名,具有未命名的参数(obj-c)

+ (void) methodName:(TypeObject *)typeObject1:(TypeObject *)typeObject2; 

那么这被称为像这样:

[object methodName:obj1:obj2]; 

我觉得很丑陋和不安,但它的基础之上。

有人可以指引我解释为什么这是有效的参考。

FWIW代码库(继承)这个来自于,充满马虎,懒惰的东西,几十个拼写错误,看起来像是由某人不需要再读过它的格式。 (再次感谢您uncrustify

回答

8

这是一个well-kown and documented feature (pdf, p. 14)

原则上,一个Rectangle类可以代替实施setOrigin:: 方法,没有标签的第二个参数,这将被调用 如下:

[myRectangle setOrigin:30.0 :50.0]; // This is a bad example of multiple parameters

但苹果discourage everbody of using parameter passing without keyword

在所有参数前使用关键字。
- (void)sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag; - >对。
- (void)sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag; - >错了。

为什么它被objective-C的创建者所允许,我不知道。也许它与Smalltalk遗产有关。

+0

我想我一定错过了一次会议,我想苹果公司的失望导致我之前没有遇到过。 – ocodo

+0

也许苹果应该教静态分析器产生警告 - 因为未命名的参数会破坏objc最强大的功能之一。 – vikingosegundo

+0

@vikingosegundo修复链接! – CrimsonChris