在之前的文章里,了解到了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进行扩容等