iOS Runtime

2020-05-27  本文已影响0人  爱吃麦子的鱼

Runtime背景

OC是基于C的一门面向对象的语言,C语言是一门面向过程的语言,面向对象的实现是通过C语言的一套API,runtime运行时实现的。runtime的核心是消息传递。

对象的结构

想要了解消息传递机制,需要先了解OC对象的结构。

OC对象的分类

主要存储成员变量的具体值

存储类的协议、属性、成员变量、实例方法

主要存储类方法

OC对象的结构
isa、superclass总结
isa superClass.png

通过上图我们可以看出整个体系构成了一个自闭环。struct objc_object结构体实例它的isa指针指向类对象,类对象的isa指针指向了元类。super_class指针指向了父类的类对象。元类的super_class指针指向了父类的元类,那元类的isa指针又指向了自己。

instance调用对象方法的轨迹
isa找到class,方法不存在,就通过superclass找父类

class调用类方法的轨迹
isa找meta-class,方法不存在,就通过superclass找父类

Runtime消息传递

方法调用三个阶段
1、 消息发送:负责从类及父类的缓存列表及方法列表查找方法。
2、 动态解析:如果消息发送阶段没有找到方法,则会进入动态解析阶段,负责动态的添加方法实现。
3、 消息转发:如果也没有实现动态解析方法,则会进行消息转发阶段,将消息转发给可以处理消息的接受者来处理。

消息发送
消息发送.png
动态解析
动态解析.png
消息转发
消息转发.png

Runtime应用

上一篇下一篇

猜你喜欢

热点阅读