IOS中关于多继承

首先,object-c不能够多继承,那么有没有其他方式替代?有,一种是伪继承,另一种是@protocol委托方式来实现

1、伪继承

尽管在object-c中不再提供多继承,但它提供了另外一种解决方案,使对象可以响应在其他类中实现的消息,这种方案叫做消息转发,它可以使一个类响应另外一个类中实现的消息

在一般情况下,发送一个无法识别的消息会产生一个运行时的错误,导致应用程序崩溃,但是注意,在崩溃之前,iphone运行时对象为每个对象提供了第二次机会来处理消息。捕捉到一条消息后可以把它重定向到可以响应该消息的对象。

这个功能完全通过消息转发来实现,发送消息给一个无法处理该选择器的对象时,这个选择器就会被转发给forwardInvocation方法,接受这条消息的对象,用一个NSInvocation的实例保存原始的选择器和被请求的参数。所以,我们可以覆盖forwardInvocation方法,并把消息转发给另外一个对象。

1.1 实现消息转发功能

在程序添加消息转发功能以前,必须覆盖两个方法,即methodSignatureForSelector:和forwardInvocation:。methodSignatureForSelector:的作用在于为另一个类实现的消息创建一个有效的方法签名。forwardInvocation:将选择器转发给一个真正实现了该消息的对象。

- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector

{

NSMethodSignature* signature = [super methodSignatureForSelector:Selector];

if(!signature)

signature = [self.carinfo methodSignatureForSelector:selector];


return signature;

}

- (void)forwardInvocation:(NSInvocation *)invocation

{

SEL selector = [invocatio selector];

if([self.carinfo respondsToSelector:selector])

{

[invocation invokeWithTarget:sellf.carinfo];

}

}


2、委托

在IOS中委托通过一种@protocol的方式实现,所以又称为协议。协议是多个类共享的一个方法列表。在协议中所列出的方法没有响应的实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值