iOS 开发 深入浅出Rumtime运行时之消息转发机制详解

本文详细介绍了Objective-C中的消息转发机制,包括resolveInstanceMethod、forwardingTargetForSelector和methodSignatureForSelector三个补救步骤。通过这些机制,开发者可以在运行时处理无法响应的消息,防止程序崩溃。
摘要由CSDN通过智能技术生成

消息转发机制概括

在Objective-C中,使用对象进行方法调用是一个消息发送的过程(Objective-C采用“动态绑定机制”,所以所要调用的方法直到运行期才能确定)。

点击这里查看 – 深入浅出Rumtime运行时之消息发送机制详解

方法在调用时,系统会查看这个对象能否接收这个消息(查看这个类有没有这个方法,或者有没有实现这个方法。),如果不能并且只在不能的情况下,就会调用下面这几个方法,给你“补救”的机会,你可以先理解为几套防止程序crash的备选方案,我们就是利用这几个方案进行消息转发,注意一点,前一套方案实现后一套方法就不会执行。如果这几套方案你都没有做处理,那么程序就会报错crash。

OC的运行时在程序崩溃前提供了三次拯救程序的机会:

方案一:点击这里查看 – 深入浅出Runtime运行时之方法动态处理(Dynamic Method Resolution)详解

+ (BOOL)resolveInstanceMethod:(SEL)sel
+ (BOOL)resolveClassMethod:(SEL)sel

方案二:

- (id)forwardingTargetForSelector:(SEL)aSelector

方案三:

- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector;
- (void)forwardInvocation:(NSInvocation *)anInvocation;

这里写图片描述

补救机会一:resolveInstanceMethod

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值