ios方法缓存

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

你可能感兴趣的:(ios方法缓存)