Runtime篇

作者: 清风徐来121 | 来源:发表于2020-10-26 14:13 被阅读0次
    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篇

        本文链接:https://www.haomeiwen.com/subject/nkzomktx.html