返回

在 iOS 底层,objc_class 中的缓存如何提升类方法的调用性能?

IOS

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 对于优化类方法的调用性能至关重要。