1

根据我的理解C专家Objective-C是一种动态绑定语言,不允许重载类中的任何方法。Objective-C中的函数重载?

但有一两件事让我感到愤怒,如果我写两个方法具有相同的名称,但不同数量的参数列表,如:

// Which is not allowed in objective-c 

-(void)updateValue:(int)intVal{ 

    } 

-(void)updateValue:(float)floatVal{ 

    } 

但其中的Objective-C允许第二种情况是:

// Allowed in Objective-C 

-(void)updateValue:(int)intVal{ 

    } 

-(void)updateValue:(float)floatVal :(int)intVal{ 

    } 

虽然这两种情况都是方法重载。

现在我的问题是为什么允许第二种情况。

在第二种情况下是否改变Method Name的方法有两个参数?或者是其他东西 ?

请解释一下。

+2

不要写' - (无效)updateValue:(浮点)floatVal:(INT) intVal'。至少,编写' - (void)updateValue:(float)floatVal andSomething:(int)intVal'。否则,签名是'-updateValue:','-updateValue ::'(当没有参数介绍时)和'-updateValue:andSomething:'。 – Larme

回答

6

是否在第二种情况下改变Method Name的方法有两个参数?

是的。方法名称是其所有参数前缀(包括冒号)的组合。所以你的两种方法是updateValue:updateValue::

HTH

2
-(void)updateValue:(int)intVal 
    { 
    } 

-(void)updateValue:(float)floatVal 
    { 
    } 

这是不允许的作为当与然后因为型铸造值的参数的用户呼叫updateValue可以改变,模糊的方法是展示。

-(void)updateValue:(int)intVal 
    { 
    } 

    -(void)updateValue:(float)floatVal :(int)intVal 
    { 
    } 

被允许作为参数计数是不同的,所以编译器知道调用哪个方法,并且当如此暧昧方法调用不是他们