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函数指针。


对象的数据结构

对象、类对象、元类对象

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

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


isa指向表

消息传递机制

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


消息传递

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

消息转发流程
消息转发流程.jpg

我们可以在

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容