美文网首页
ios中关于方法缓存cache策略

ios中关于方法缓存cache策略

作者: mr_ios_zhang | 来源:发表于2022-05-08 16:49 被阅读0次

文章部分出于自己的理解,有不对的地方,希望大家指正。

实例对象我们可以看作是一个指针,实例对象通过isa指针指向类对象,类对象通过isa指针指向元类对象,类对象和元类对象本身其实都是objc_class结构体,里面存放着我们需要的方法列表等。

那么当我们方法调用的时候,方法是如何缓存的呢?
当我们方法调用的时候,首先通过isa指针找到类对象,然后在类对象的方法列表里面查找相对应的方法,找到以后会加入到我们方法缓存里面,等下次我们再调用的时候,首先会先从缓存里面去查找相关方法,更加的效率。

那如果我们调用的是父类里面的方法呢,其实父类对象里面的方法是不可以缓存到子类方法缓存列表里面的,所以,当我们调用的是父类对象里面的方法的时候,其方法不会在子类对象方法缓存列表里面进行缓存。
元类对象的相关缓存同类对象。

至于缓存扩容和具体的缓存策略:

在arm64结构,也就是真机环境下,刚开始初始化的缓存方法的容器的长度2,当容器的长度小于8时,是满容量了才扩容。当容器的长度大于8时,是7/8扩容。也就是说当容器的长度为8时,容器可以存储8个方法。当容器的长度为16时,当第15个方法需要存储进来的时候,容器就要扩容了。

在x86_64架构下,刚开始初始化的容器的长度为4,是3/4扩容。这里的3/4扩容指的是:如果容器的长度为4,当第3个数据需要存储的时候,就要扩容了。如果容器的长度为8,当第6个数据需要存储的时候,就要扩容了。也就是说容器只能存储容器长度的3/4减1个方法。

还有一点就是:当容器扩容之后,前面存储的方法也会随之清空。

参考链接:https://www.jianshu.com/p/fbe5e2ce4b1e

相关文章

  • ios中关于方法缓存cache策略

    文章部分出于自己的理解,有不对的地方,希望大家指正。 实例对象我们可以看作是一个指针,实例对象通过isa指针指向类...

  • objc_class中的cache_t

    目标 主要分析cache_t流程,对象的属性、方法都会被iOS的缓存机制缓存下来,下次调用会从缓存中查找,缓存的功...

  • iOS方法缓存-cache

    1. cache的结构 我们之前探索过Class的结构以及其内部的成员,其中了解到了isa,superClass以...

  • Volley 之 缓存篇

    与Volley缓存相关的文件主要为: Cache:定义缓存中的方法的接口类 NoCache:实现了Cache接口,...

  • iOS-底层原理07-catch_t

    对象的内存结构 cache_t结构 1.第一次运行一个方法之前,cache_t缓存中的方法为0,之后缓存中的方法的...

  • 对NSURLRequestUseProtocolCachePol

    默认的缓存策略, 如果缓存不存在,直接从服务端获取。如果缓存存在,会根据response中的Cache-Contr...

  • ecjia_cache函数使用

    通过ecjia_cache函数获取缓存实例 调用缓存方法 get 方法可以用来取出缓存中的项目,缓存不存在的话返回...

  • 移动端缓存方案

    移动端缓存方案 标签(空格分隔): 缓存 移动端 Cache目的 Cache几乎无处不在,iOS系统clean m...

  • 方法缓存Cache_t分析

    缓存Cache_t bucket_t cache_t 缓存的是 方法 method_t: 缓存流程 缓存的入口是:...

  • 还在用GuavaCache?它才是 Java 本地缓存之王

    Guava Cache 的优点是封装了get,put操作;提供线程安全的缓存操作;提供过期策略;提供回收策略;缓存...

网友评论

      本文标题:ios中关于方法缓存cache策略

      本文链接:https://www.haomeiwen.com/subject/kxuqurtx.html