返回

剖析iOS底层原理:类的加载原理(中)

IOS

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底层原理,并编写出更加健壮和高效的代码。