cache_t结构分析

在之前的文章里,了解到了alloc的流程,isa指针的作用和意义,所有的类都来自objc_class,接下来我们继续了解objc_class里的另一重点cache_t

objc_class
cache_t内部结构

通过阅读源代码,cache_t里主要是

1、_buckets

2、_mask

3、_flags 表示位置标记

4、_occupied 记录当前类被调用的函数(去重)

在真机环境下1和2是存放在_maskAndBuckets里

通过分析cache_t里函数incrementOccupied()调用栈得到insert函数:

cache_t的inset函数

654行用reallocate函数对bucket进行初始化创建。insert函数里还涉及到扩容算法和储存方案,哈希算法函数(670行)来存储查询mask和sel,由于这种算法特性,bucket的存储是没有顺序的(具体的分析推导步骤不在此详解)。

reallocate函数

通过insert函数和reallocate函数可以分析得出,cache_t里的_mask是第669行的mask_t m,(具体的分析推导步骤不在此详解)

bucket_t结构

bucket_t里存放着类里的imp和sel。

结论:cache_t里记录着该类的函数指针imp和sel,占用次数,并会在特定时机对bucket进行扩容等

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容