OC 消息转发机制


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

OC 消息转发机制_第1张图片
image.png

method的定义

OC 消息转发机制_第2张图片
image.png

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

案例场景

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

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

OC 消息转发机制_第3张图片
image.png
OC 消息转发机制_第4张图片
image.png

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

OC 消息转发机制_第5张图片
image.png
OC 消息转发机制_第6张图片
image.png

调用Person的wantToFly方法 从消息转发的角度看Person有三种方式可以实现
Person需导入

OC 消息转发机制_第7张图片
image.png

消息转发分为3个步骤

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

OC 消息转发机制_第8张图片
image.png

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

OC 消息转发机制_第9张图片
image.png

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

OC 消息转发机制_第10张图片
image.png

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

你可能感兴趣的:(OC 消息转发机制)