Runtime相关

Runtime

  • 数据结构
  • 类对象与元类对象
  • 消息传递
  • 方法缓存
  • 消息转发
  • Method-Swizzling
  • 动态添加方法
  • 动态方法解析
isa指针

在32为或64位架构下,isa指针分为指针形isa和非指针形isa
指针型isa的值代表Class的地址
非指针型isa的值的部分代表Class的地址

isa指针的指向
  • 关于对象,其指向类对象
  • 关于类对象,其只想元类对象
  • 元类对象的isa指针都指向根元类对象,而根元类对象对象的isa指针指向根类对象。
method_t

method_t结构体封装了函数四要素,即:

  • 名称
  • 返回值
  • 参数
  • 函数体

其中名称通过SEL方法选择器表示,返回值和参数则由“Type Encodings”类型的字符串表示,函数体则指代了IMP函数指针。


Runtime相关_第1张图片
对象的数据结构

对象、类对象、元类对象

  • 类对象存储实例方法列表等信息
  • 元类对象存储类方法列表等信息

关于类对象的isa指针指向可以用下图表示:


Runtime相关_第2张图片
isa指向表

消息传递机制

可以用下图展示消息传递的流程:


Runtime相关_第3张图片
消息传递

注意:在消息缓存中查找是通过哈希表来快速定位函数指针,而在当前类方法列表中查找时,对于已经排序好的列表使用二分查找,而对于没有排序的列表采用一般遍历查找发。

消息转发流程
Runtime相关_第4张图片
消息转发流程.jpg

我们可以在

ressolvelinstanceMethod方法中为对象动态添加方法,已达到处理消息未被实现的问题。

你可能感兴趣的:(Runtime相关)