返回
剖析iOS底层原理:类的加载原理(中)
IOS
2024-01-01 21:22:38
iOS底层原理:类的加载原理(中)
前言
在上篇《iOS底层原理:类的加载原理(上)》文章中,我们讲到了类的加载过程,但还没有涉及到ro和rw相关操作。今天,我们将继续深入探讨类的加载原理,看看readClass函数之后发生了什么。
准备工作
在继续之前,我们需要确保已经完成了以下准备工作:
- 安装了最新版本的Xcode和iOS SDK。
- 创建了一个新的iOS项目。
- 在项目中添加了objc4-818库。
readClass函数之后
readClass函数完成后,类对象已经完全加载到内存中。接下来,我们需要做的就是对类对象进行一些必要的处理,以便它能够被程序使用。这些处理包括:
- 将类对象添加到类的缓存中。
- 为类对象创建一个元类。
- 为类对象创建实例对象。
将类对象添加到类的缓存中
类对象加载完成后,它会被添加到类的缓存中。类的缓存是一个全局变量,它存储了所有已经加载的类对象。当程序需要使用一个类对象时,它首先会去类的缓存中查找。如果类对象已经在缓存中,那么程序就可以直接使用它。否则,程序会调用objc_allocateClassPair函数来创建一个新的类对象,并将其添加到类的缓存中。
为类对象创建一个元类
每个类对象都有一个对应的元类。元类是一个特殊的类对象,它存储了类对象的信息。元类中的信息包括:
- 类名
- 父类名
- 协议列表
- 实例变量列表
- 方法列表
- 属性列表
元类与类对象有着密切的关系。类对象是类的实例,而元类是类对象的类。也就是说,元类是类对象的父类。
为类对象创建实例对象
类对象加载完成后,程序就可以为它创建实例对象了。实例对象是类的具体实例,它存储了类对象中的数据。实例对象可以通过调用objc_alloc函数和objc_init函数来创建。
objc_alloc函数会为实例对象分配内存,而objc_init函数会初始化实例对象。
总结
在本文中,我们探讨了类的加载原理。我们了解了readClass函数之后发生了什么,以及如何将类对象添加到类的缓存中,如何为类对象创建一个元类,以及如何为类对象创建实例对象。
通过对这些知识的了解,我们可以更好地理解iOS底层原理,并编写出更加健壮和高效的代码。