Runtime系列:Class的结构【03】

本文详细剖析了Objective-C中Class的结构,包括bits类信息、class_rw_t和class_ro_t结构,以及method_t、IMP和SEL的作用。同时,讲解了方法缓存如何提高查找速度,并介绍了方法选择器和函数编码字符串在类中的应用。通过对这些基础知识的探讨,有助于深入理解Objective-C的运行机制。
摘要由CSDN通过智能技术生成

通过isa、superclass指针指向中,我们知道了,isasuperclass的作用,接下来继续详细了探寻下Class结构其他成员变量的作用。Class的底层结构图如下图:
在这里插入图片描述

1、bits类信息

1.1、class_rw_t结构

class_rw_t结构通过 bits 变量与 FAST_DATA_MASK 的位&运算,获取到:

class_rw_t* data() {
    return (class_rw_t *)(bits & FAST_DATA_MASK);
}

class_rw_t里面的methods、properties、protocols是二维数组,是可读可写的,包含了类的初始内容、分类的内容

在这里插入图片描述

1.2、class_ro_t结构

class_ro_t 里面的baseMethodListbaseProtocolsivarsbaseProperties是一维数组,是只读的,包含了类的初始内容
在这里插入图片描述

1.3、method_t结构

method_t 是对方法\函数的封装
在这里插入图片描述

1、IMP代表函数的具体实现

在这里插入图片描述

2、SEL代表方法\函数名,一般叫做选择器,底层结构跟char *类似

可以通过@selector()sel_registerName()获得。
可以通过sel_getName()NSStringFromSelector()转成字符串。
不同类中相同名字的方法,所对应的方法选择器是相同的
在这里插入图片描述

3、types包含了函数返回值、参数编码的字符串

在这里插入图片描述
Type Encoding
iOS中提供了一个叫做@encode的指令,可以将具体的类型表示成字符串编码
在这里插入图片描述在这里插入图片描述

2、cache_t 方法缓存列表

Class内部结构中有个方法缓存(cache_t),用散列表(哈希表)来缓存曾经调用过的方法,可以提高方法的查找速度。

在这里插入图片描述哈希表:本质是用空间换时间,在iOS中采用位&运算来取值赋值。

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瓜子三百克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值