Runtime篇

image.png

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

iOS方法缓存和查找详解

image.png

image.png

image.png

class_rw_t提供了运行时对类扩展的能力,class_ro_t存储的是类在编译时就确定的一些信息

image.png

types实际上包含了函数的返回值和参数


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

你可能感兴趣的:(Runtime篇)