OC 消息转发机制


首先了解几个概念:
class 的定义

image.png

method的定义

image.png

消息转发本质:
在运行时将方法地址(imp)和一个名字(sel)绑定加入到class的方法表中

案例场景

以对象Person不能执行"fly()"的操作,而对象Plane有"fly()"的能力,但是Person想要具备飞行的能力

Person类一个只定义未实现的方法"fly()"和一个未定义却实现的方法"ICanFly()"

image.png
image.png

Plane类有一个实现的方法"fly()"

image.png
image.png

调用Person的wantToFly方法 从消息转发的角度看Person有三种方式可以实现
Person需导入 <objc/runtime.h>

image.png

消息转发分为3个步骤

1.动态方法解析
作用:在不具备处理这个方法的类(Person)的方法列表中加入你想要执行的方法"fly()"

image.png

2.备用接收者
作用:当前的类(Person)无法处理这个方法,找一个实现这个方法的类(Plane)代为处理这个方法
疑问? 看到这里 发现当前类 是不是感觉oc 也能间接的实现多继承了?

image.png

3.完整转发
作用:当前的类(Person)无法处理这个方法,找一个实现这个方法的类(Plane)代为处理这个方法

image.png

到这里就结束了,工作中如果使用这套机制,会让代码变得很混乱,能用设计模式代替的尽量用设计模式代替

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容