返回
iOS 底层揭秘:探寻 Class 的本质之谜
IOS
2023-10-17 11:06:10
引言
在 iOS 开发的广阔天地里,深入了解底层原理至关重要,而 Class 无疑是核心基石。本篇博文将通过对 iOS 底层班视频学习的心得梳理,揭开 Class 的神秘面纱,探寻其本质。
Class 的起源
Class 是 Objective-C 中的基础概念,代表着对象的行为和属性。从底层角度看,Class 实际上就是一个指向 objc_class
结构体的指针,在内存中以结构体形式存在。因此,要理解 Class 的本质,我们就需要深入剖析 objc_class
结构。
objc_class
结构
objc_class
结构包含了定义 Class 的所有必要信息,包括:
- isa 指针:指向 Class 的元类
- superclass 指针:指向 Class 的父类
- name:Class 的名称
- instance size:Class 实例的大小
- instance variable list:实例变量列表
- method list:方法列表
- protocol list:协议列表
- property list:属性列表
Class 的分类
在 iOS 中,Class 可以分为两类:
- 常规类 :定义对象的属性和行为,如
NSObject
。 - 元类 :定义 Class 本身的属性和行为,如
NSObject
的元类NSClass
。
元类与 Class 的关系
Class 的 isa 指针指向其元类,而元类的 isa 指针又指向根元类 NSObject
。这种层层递进的关系形成了一个完整的继承链。元类主要负责创建和管理 Class,提供创建实例、响应方法调用等功能。
实例变量与方法
实例变量和方法是 Class 的两个重要组成部分:
- 实例变量 :存储对象的状态,通过点语法进行访问,如
self.name
。 - 方法 :定义对象的具体行为,通过调用语法进行调用,如
[self setName:]
。
Class 的创建
Class 的创建通过 objc_allocateClassPair
函数完成,它需要提供 Class 的名称和父类。创建完成后,可以使用 objc_registerClassPair
函数将其注册到 Objective-C 运行时。
结语
Class 是 iOS 开发中的基石,理解其本质对于深入掌握底层原理至关重要。通过探寻 objc_class
结构、Class 的分类、以及元类与 Class 的关系,我们揭开了 Class 神秘的面纱。掌握这些知识,将使我们能够构建更强大、更健壮的 iOS 应用程序。