2010-12-04 121 views
2

我創建2個對象的子類從NSObject的不同類型的對象作爲一個函數的參數

AObject,BObject

是否有可能這些2個對象的變量傳送到相同的功能?

-(void)myFunction:(AObject *)obj; 

-(void)myFunction:(BObject *)obj; 

我在xcode中測試,它是不允許的。 有沒有更換方法?

歡迎任何評論

感謝 InterDev中

回答

2

有幾種選擇。這裏有四個浮現在腦海中,每個都有自己的優點和缺點:

  1. 判定由簽名:

    - (void)myFunctionWithA:(AObject *)obj; 
    - (void)myFunctionWithB:(BObject *)obj; 
    
  2. 聲明NSObject *類型(或id的參數,如意見建議)並查詢函數內部的類型。

  3. 如上所述,但是通過聲明公共基類BaseObject *來約束它,其中AObjectBObject繼承。
  4. 合併基類與蹦牀技術:

    - (void)myFunction:(BaseObject *)base { 
        [base myTrampoline:self]; 
    } 
    

    BaseObject聲明瞭抽象方法myTrampoline:,其AObjectBObject實現。

不知道更多關於您的問題,不可能說哪個最好。

+0

謝謝。我選擇2. – arachide 2010-12-04 02:53:45

1

有人建議只輸入你的參數爲id,但如果你感覺很棒,你可以強制編譯時檢查你的對象是否真的能夠做你需要的:使用協議。

@protocol DoingSomething <NSObject> 
// whatever methods you intend to call on the parameter of that one method 
@end 

//... 
- (void)myFunction:(id<DoingSomething>)param { 
    // only send messages to param that are in <DoingSomething> and <NSObject> 
} 
//... 
相關問題