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 
    { 
    } 

被允許作爲參數計數是不同的,所以編譯器知道調用哪個方法,並且當如此曖昧方法調用不是他們