Iphone 作为函数参数的不同类型对象
我从NSObject创建了2个对象子类 对象,对象 是否可以将这两个对象的变量转换为同一个函数 比如Iphone 作为函数参数的不同类型对象,iphone,Iphone,我从NSObject创建了2个对象子类 对象,对象 是否可以将这两个对象的变量转换为同一个函数 比如 -(void)myFunction:(AObject *)obj; -(void)myFunction:(BObject *)obj; 我在xcode中测试过,这是不允许的。 有什么替代方法吗 欢迎评论 谢谢 interdev有几个选项。下面是我想到的四种,每种都有各自的优点和缺点: 签名歧视: - (void)myFunctionWithA:(AObject *)obj; - (void)
-(void)myFunction:(AObject *)obj;
-(void)myFunction:(BObject *)obj;
我在xcode中测试过,这是不允许的。
有什么替代方法吗
欢迎评论
谢谢
interdev有几个选项。下面是我想到的四种,每种都有各自的优点和缺点:
- (void)myFunctionWithA:(AObject *)obj;
- (void)myFunctionWithB:(BObject *)obj;
NSObject*
(或id
,如注释所示)的参数,并在函数内查询该类型BaseObject*
,从中继承aoobject
和boobject
- (void)myFunction:(BaseObject *)base {
[base myTrampoline:self];
}
BaseObject
声明了抽象方法myTrampoline:
,该方法由AObject
和BObject
实现如果不了解问题的更多信息,就不可能说哪一个是最好的。有人建议只键入参数作为
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>
}
//...
@协议正在做一些事情
//无论您打算对该方法的参数调用什么方法
@结束
//...
-(void)myFunction:(id)参数{
//仅向和中的参数发送消息
}
//...
@gcamp我不同意。特别是因为并非所有Objective-C对象都是NSObject*
(有些对象也是NSProxy*
,尽管这相对较少)。而id
是struct objc_object*
的同义词,适用于任何对象。不过这并不重要。@gcamp,@乔纳森:谢谢你的建议。