Class内部结构中有个方法缓存(cache_t),用散列表(哈希表)来缓存曾经调用过的方法,可以提高方法的查找速度
///
struct cache_t{
struct bucket_t * buckets; //散列表 —>bucket
mask_t _mask; //散列表长度 -1
mask_t _occupied //已经缓存的方法数量
}
struct bucket_t{
cache_key_t key ;//SEL作为key
IMP _imp; //函数的内存地址
}
///
缓存查找
objc-cache.mm
bucket_t*cache::find(cache_key_t k , Id receiver)
@selector(studentTest) & _mask = 2
@selector(personTest) & _mask = 2
@selector(goodStudentTest) & _mask = 7
空间换时间
f(key) == index