美文网首页
ios runtime方法动态实现和消息转发

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

作者: 努力心安 | 来源:发表于2018-05-10 19:51 被阅读0次

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

    方法动态实现

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

    图1 图2

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

    消息转发

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

    相关文章

      网友评论

          本文标题:ios runtime方法动态实现和消息转发

          本文链接:https://www.haomeiwen.com/subject/lactdftx.html