Runtime系列:Class的结构【03】

简介: Runtime系列:Class的结构

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

d50380ded88044f1bec95bd41139c9ff.png


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是二维数组,是可读可写的,包含了类的初始内容、分类的内容


846a2a1f741e43799bbf0557634c65f6.png


1.2、class_ro_t结构

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

3a3b9b5db4cc4748877d30aa081f94b5.png


1.3、method_t结构

method_t 是对方法\函数的封装

34c4d4d674e74201a37fdfe307355008.png


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

8428087cf17d4d34bc9a166bd0c238e1.png


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

可以通过@selector()和sel_registerName()获得。

可以通过sel_getName()和NSStringFromSelector()转成字符串。

不同类中相同名字的方法,所对应的方法选择器是相同的

d1766ef44bdd4312b77483eb0f520b1d.png


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

36e05acedb9b48ecb2505a35cedc617e.png

Type Encoding:

iOS中提供了一个叫做@encode的指令,可以将具体的类型表示成字符串编码


b73b9c7941804d2fab5a730acc68ee70.png

217b39a609f24e0b9f1dc0889df18733.png

2、cache_t 方法缓存列表


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

e30a8876c28148188b7da7b1c53d836f.png

哈希表:本质是用空间换时间,在iOS中采用位&运算来取值赋值。


相关文章
|
Shell Android开发
Android系统 init.rc文件详解
Android系统 init.rc文件详解
2001 0
|
API Docker Windows
2024 Ollama 一站式解决在Windows系统安装、使用、定制服务与实战案例
这篇文章是一份关于Ollama工具的一站式使用指南,涵盖了在Windows系统上安装、使用和定制服务,以及实战案例。
2024 Ollama 一站式解决在Windows系统安装、使用、定制服务与实战案例
|
物联网 PyTorch 算法框架/工具
介绍一个大语言模型的微调框架Swift | AIGC
介绍一个大语言模型的微调框架Swift 【7月更文挑战第4天】
2169 3
|
Java 关系型数据库 MySQL
Gradle中的依赖Dependencies说明与使用总结
Gradle中的依赖Dependencies说明与使用总结
853 0
|
SQL 网络安全
sql注入--通过修改数据完成注入--一文详细讲解
🍀了解通过修改库中数据完成注入的方法
701 0
sql注入--通过修改数据完成注入--一文详细讲解
Linux进程通信——管道(下)
Linux进程通信——管道(下)
|
测试技术 调度 Android开发
Android性能加压方案:提高概率性问题的复现几率
Android性能加压方案:提高概率性问题的复现几率
526 0
Android性能加压方案:提高概率性问题的复现几率
|
关系型数据库 Linux Perl
精确度量Linux下进程占用多少内存的方法
在Linux中,要了解进程的信息,莫过于从 proc 文件系统中入手去看。proc的详细介绍,可以参考内核文档的解读,里面有很多内容 yum install -y kernel-doc cat /usr/share/doc/kernel-doc-3.10.0/Documentation/
14034 0
|
存储 监控 编译器
Android Native 内存泄漏系统化解决方案
C++内存泄漏问题的分析、定位一直是Android平台上困扰开发人员的难题。因为地图渲染、导航等核心功能对性能要求很高,高德地图APP中存在大量的C++代码。解决这个问题对于产品质量尤为重要和关键,高德技术团队在实践中形成了一套自己的解决方案。
15864 0
下一篇
oss云网关配置