image.png image.png
寻址40位就能准确寻址,非指针型isa设计是节省内存做法
image.png
局部性原理可以理解为将调用频率最高的方法放到缓存,避免到方法列表中遍历查找,提高了效率
image.png
cache_t的结构,这应该是一个bucket_t的结构体数组,mask是总数量,_occupied是已使用的数量。理论上来说,为了实现快速查找,这个bucket应该是指向一个哈希表。
struct cache_t {
struct bucket_t *_buckets;
mask_t _mask;
mask_t _occupied;
public:
struct bucket_t *buckets();
mask_t mask();
mask_t occupied();
...
}
bucket的结构,就是一个key和一个IMP,key其实就是@seletor,IMP是一个无类型的函数指针,调用方法时通过sel哈希查找快速定位到相对应的bucket_t然后对应提取出IMP
image.png image.pngimage.png
image.png
class_rw_t提供了运行时对类扩展的能力,class_ro_t存储的是类在编译时就确定的一些信息
image.pngtypes实际上包含了函数的返回值和参数
image.png
Runtime的基础数据结构全局图如下
image.png image.png image.png image.png
打印结果都为Phone,super class只是从父类开始查找class方法,因为class实际上是在NSObject中实现的,并没有继承类重写 image.png image.png
super的receiver指向也是self,方法的接受者
image.png
image.png
消息转发处理细节
image.png
网友评论