2010-12-04 93 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> 
} 
//... 
相关问题