首先了解几个概念:
class 的定义
method的定义
消息转发本质:
在运行时将方法地址(imp)和一个名字(sel)绑定加入到class的方法表中
案例场景
以对象Person不能执行"fly()"的操作,而对象Plane有"fly()"的能力,但是Person想要具备飞行的能力
Person类一个只定义未实现的方法"fly()"和一个未定义却实现的方法"ICanFly()"
Plane类有一个实现的方法"fly()"
调用Person的wantToFly方法 从消息转发的角度看Person有三种方式可以实现
Person需导入 <objc/runtime.h>
消息转发分为3个步骤
1.动态方法解析
作用:在不具备处理这个方法的类(Person)的方法列表中加入你想要执行的方法"fly()"
2.备用接收者
作用:当前的类(Person)无法处理这个方法,找一个实现这个方法的类(Plane)代为处理这个方法
疑问? 看到这里 发现当前类 是不是感觉oc 也能间接的实现多继承了?
3.完整转发
作用:当前的类(Person)无法处理这个方法,找一个实现这个方法的类(Plane)代为处理这个方法
到这里就结束了,工作中如果使用这套机制,会让代码变得很混乱,能用设计模式代替的尽量用设计模式代替