美文网首页
01Class的结构

01Class的结构

作者: 白开了杯水 | 来源:发表于2021-09-07 15:52 被阅读0次

想彻底的了解runtime,那么就需要从底层了解开始,这边文章将介绍一下Class的结构

类的结构大概如下图

class结构

可以看到有isa、superclass、cache以及bits,isa和superclass可以看之前这篇文章:对象的isa与superclass
那让我们先来看看 bits里面有什么东西,我们查看源码,如下图

class_data_bits_t部分源码

可以看到,有一个data()函数,里面使用了bits & FAST_DATA_MASK,就返回了一个class_rw_t的数据,那么class_rw_t又是什么呢,我们继续寻找它的定义源码

class_rw_t部分源码1 class_rw_t部分源码2 class_rw_t部分源码3

我们整理一下,大概就如下图

class_rw_t结构图

里面又有一个class_ro_t,那么这里面的结构如下图

class_ro_t结构图
class_rw_t与class_ro_t的区别

class_rw_t有methods、properties、protocols,它们都是二维数组,是可读可写的,包含了类的初始内容、分类的内容 ,举例

class_rw的methods结构

class_ro_t有baseMethodList、baseProtocols、ivars、baseProperties,它们是一维数组,是只读的,包含了类的初始内容

class_ro_t的baseMethodList结构
Method_t

Method_t,主要结构如下图:

Method_t主要结构

它其实就是一个方法的封装,函数体、参数、名称都具备

方法缓存

为什么要做方法缓存呢,假设你这个方法调用了10次,然后方法数组里又有10个方法,那你岂不是要查100次?所以苹果专门为这个设计了一个叫做方法缓存的东西,采用散列表算法来提高方法的查找速度,直接看图

cache_t结构图
扩展
  • SEL可以当做一个字符串,一个名字;不同类的sel,只要名字相同,那么它们是一样的,包括地址
  • types为i24@0:8i16f20,代表返回值int,参数int,float,24:所有参数所占的字节数,0 : 从0开始,8 :从第8个字节开始…

相关文章

  • 01Class的结构

    想彻底的了解runtime,那么就需要从底层了解开始,这边文章将介绍一下Class的结构 类的结构大概如下图 可以...

  • 02.消息机制

    之前内容:01Class的结构[https://www.jianshu.com/p/c3049e046f73] 消...

  • 03.runtime答疑

    之前章节01Class的结构[https://www.jianshu.com/p/c3049e046f73]02....

  • Runtime-方法

    01class的结构 元类对象和元类的结构是一样的,他是一种特殊的类对象 class_rw_t里面的methods...

  • 结构:结构中的结构

    结构数组 结构中的结构 嵌套的结构

  • 演讲的结构-PREP结构

    一个有质量的演讲,一定不是东说一句西说一句,严密得体的结构,不仅能让听者轻松get到你的观点,而且更容易被你说服。...

  • 数据结构简单介绍(一)

    数据结构 数据的逻辑结构 数据的存储结构 数据的运算 数据的逻辑结构 也叫数据结构 集合结构 线性结构 树形结构 ...

  • 003-控制流程语句if,elseif,switch,for,w

    控制流程语句 分支结构 循环结构 分支结构 简单的if结构 if...else结构 多重if结构 嵌套if结构 总...

  • 大话数据结构摘录

    数据结构的不同维度 逻辑结构集合结构线性结构树形结构图形结构 物理结构顺序存储结构链式存储结构 算法的定义 算法是...

  • 结构 结构

    当我走过这里的每一寸土地 我的心似乎从来都不能平静 除了月光落地和花开的声音 我似乎听到了她狂热般的心跳 人们在这...

网友评论

      本文标题:01Class的结构

      本文链接:https://www.haomeiwen.com/subject/yocywltx.html