OC是一门动态语言
OC的动态性都是由Runtime来支撑的
isa指针
arm64架构之前:isa就是一个普通的指针 存储class metal-class地址
arm64架构之后:对isa进行优化,变成一个共用体,用位域来储存更多信息
Method
结构类型:
struct method_t{
SEL name; // 函数名
const char *types; // 编码(返回值类型,参数类型)
IMP imp;// 函数地址
}
方法缓存
使用散列表来缓存曾经调用的方法,可以提高查找速度 (牺牲内存空间,增加查找效率)
struct cache_t{
struct bucket_t *_buckets; // 散列表
mask_t _mask // 散列表的长度
mask_t _occupied; 已经缓存的方法数量
}
struct bucket_t {
cache_key_t _key;// SEL作为KEY
IMP _imp; // 函数的内存地址
}
网友评论