iOS开发

OC 消息转发机制

2017-06-27  本文已影响79人  蚂蚁牙齿不黑
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

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

上一篇 下一篇

猜你喜欢

热点阅读