ios runtime方法动态实现和消息转发

2018-05-10  本文已影响0人  努力心安

       当我们给一个对象发送一条消息,而这个对象又不能处理这条消息,此时就会导致报错。然而在报错之前我们使用runtime有两种解决方案。

方法动态实现

        我前一篇说过OC消息发送机制,当对象在本类以及父类里面都找不到对应的方法实现的时候,此时系统会调用 resolveInstanceMethod:或者resolveClassMethod: 方法,让开发者有机会动态实现相应的方法,或者做一些其他的操作。我们看一下代码实现

图1 图2

        我们在viewcontroller里面调用Test类的实例方法resolveThisMethodDynamically,但是Test类里面并没有这个方法,此时系统调用resolveInstanceMethod:方法,IMP是指向方法实现的指针,通过这样我们就能避免系统奔溃出错,动态实现方法选择器与方法实现的内存地址绑定。

消息转发

        如果我们对一个对象发送一个无法处理的消息,也没有做动态实现系统就会调用             -(id)forwardingTargetForSelector:(SEL)aSelector该方法把消息发送给对应的对象,代码实现如下:

上一篇下一篇

猜你喜欢

热点阅读