返回
在 iOS 底层,objc_class 中的缓存如何提升类方法的调用性能?
IOS
2023-10-06 14:47:58
iOS 底层原理——探秘 objc_class 中的缓存
前言
我们在《iOS 底层原理——isa & 类结构探究》这篇文章中已经分析过 isa & bits 了。那么类中就还剩下一个重要的组成部分——缓存,也就是本篇我们需要研究的内容。话不多说,直接开撸。
源码
struct objc_class {
Class isa;
Class superclass;
const char *name;
long version;
long info;
long instance_size;
struct objc_ivar_list *ivars;
struct objc_method_list **methodLists;
struct objc_cache *cache;
struct objc_protocol_list *protocols;
};
objc_cache
概述
objc_cache 是 objc_class 结构中的一个成员变量,它是一个指向 struct objc_cache
结构体的指针。
struct objc_cache
结构体定义如下:
struct objc_cache {
void *reserved[2];
SEL *class_selectors;
IMP *class_methods;
};
从该结构体定义可以看出,objc_cache 包含了两个保留字段、一个指向类选择器的指针和一个指向类方法的指针。
保留字段
objc_cache 中的两个保留字段目前没有被使用,苹果保留了将来使用它们的可能性。
类选择器
类选择器是一个指向类方法选择器的指针数组。它包含了该类中所有类方法的选择器。
类方法
类方法是一个指向类方法 IMP 的指针数组。它包含了该类中所有类方法的 IMP。
objc_cache 的作用
objc_cache 的作用是缓存类方法的信息。当我们调用一个类方法时,系统首先会在 objc_cache 中查找该方法的信息。如果找到了,则直接使用缓存中的信息来调用方法。如果没有找到,则系统会遍历类的所有方法列表,找到该方法并调用它。
优点
使用 objc_cache 有以下优点:
- 提高性能:通过缓存类方法的信息,可以减少调用类方法时遍历方法列表的时间,从而提高性能。
- 节省内存:objc_cache 可以减少存储类方法信息的内存开销。
总结
objc_cache 是 objc_class 结构中的一个重要组成部分,它缓存了类方法的信息,从而提高了类方法的调用性能。
objc_cache 是 objc_class 结构中的一个重要组成部分。它缓存了类方法的信息,从而提高了类方法的调用性能。
objc_cache 的优点包括:
- 提高性能:通过缓存类方法的信息,可以减少调用类方法时遍历方法列表的时间,从而提高性能。
- 节省内存:objc_cache 可以减少存储类方法信息的内存开销。
因此,在 iOS 底层,objc_cache 对于优化类方法的调用性能至关重要。