返回
深入探究iOS底层原理:分类加载机制大揭秘
IOS
2024-02-12 13:50:05
主类加载与分类加载流程揭秘
在iOS底层原理之OC类的加载原理(中),我们探索了类加载的基本原理,以及懒加载类与非懒加载类不同的加载流程。本篇文章,我们将进一步深入剖析分类加载的机制,揭开它背后的秘密。
iOS中,分类加载分为两大类:继承分类和扩展分类。继承分类加载遵循一定的规则,先加载主类,再加载子类,最终完成分类加载;而扩展分类加载则相对简单,它直接加载扩展分类,而无需关心主类加载情况。
继承分类加载流程
当遇到继承分类加载时,系统会根据以下步骤进行加载:
- 检查主类是否已经加载 :如果主类已经加载,则直接加载分类;否则,先加载主类,再加载分类。
- 加载主类 :在加载主类时,系统会按照以下步骤进行:
- 初始化类对象:系统会为类创建一个类对象,类对象存储了类的元数据信息,如类名、属性列表、方法列表等。
- 准备类结构:系统会根据类对象的元数据信息,创建类的结构,该结构包含了类的所有成员变量和方法的地址。
- 分配类内存:系统会为类分配内存空间,并把类的结构复制到内存空间中。
- 初始化类变量:系统会调用类的初始化方法,对类的变量进行初始化。
- 加载分类 :在加载分类时,系统会按照以下步骤进行:
- 初始化分类对象:系统会为分类创建一个分类对象,分类对象存储了分类的元数据信息,如分类名、属性列表、方法列表等。
- 准备分类结构:系统会根据分类对象的元数据信息,创建分类的结构,该结构包含了分类的所有成员变量和方法的地址。
- 分配分类内存:系统会为分类分配内存空间,并把分类的结构复制到内存空间中。
- 初始化分类变量:系统会调用分类的初始化方法,对分类的变量进行初始化。
扩展分类加载流程
扩展分类加载相对简单,它直接加载扩展分类,而无需关心主类加载情况。加载过程如下:
- 初始化扩展分类对象 :系统会为扩展分类创建一个扩展分类对象,扩展分类对象存储了扩展分类的元数据信息,如扩展分类名、属性列表、方法列表等。
- 准备扩展分类结构 :系统会根据扩展分类对象的元数据信息,创建扩展分类的结构,该结构包含了扩展分类的所有成员变量和方法的地址。
- 分配扩展分类内存 :系统会为扩展分类分配内存空间,并把扩展分类的结构复制到内存空间中。
- 初始化扩展分类变量 :系统会调用扩展分类的初始化方法,对扩展分类的变量进行初始化。
主类加载与分类加载异同比较
通过对主类加载与分类加载流程的分析,我们可以总结出两者之间的异同:
- 相同点 :
- 都会初始化类对象、准备类结构、分配类内存、初始化类变量。
- 都会调用类的初始化方法。
- 不同点 :
- 主类加载需要先加载主类,再加载分类;而分类加载不需要关心主类加载情况。
- 主类加载需要初始化类对象,而分类加载不需要。
- 主类加载需要准备类结构,而分类加载不需要。
- 主类加载需要分配类内存,而分类加载不需要。
- 主类加载需要初始化类变量,而分类加载不需要。
结语
至此,我们对iOS底层原理系列文章进行了一个完整的收尾,从OC类的基本原理,到懒加载类和非懒加载类的加载流程,再到继承分类加载和扩展分类加载的流程,相信各位读者已经对iOS底层原理有了一个更加深入的了解。希望这些文章能够帮助大家更好地理解iOS底层原理,从而为开发出更加优秀的iOS应用打下坚实的基础。