01Class的结构

2021-09-07  本文已影响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结构图
扩展
上一篇 下一篇

猜你喜欢

热点阅读