美文网首页
Runtime知识点整理2

Runtime知识点整理2

作者: 化二缺 | 来源:发表于2020-05-21 08:49 被阅读0次

    Class结构

    Class结构.png

    Class_rw_t

    • class_rw_t 里面的methods 、properties、 protocols 是二维数组,是可读可写的,包含了类的初始内容、分类的内容


      class_rw_t.png

    Class_ro_t

    • class_ro_t里面的baseMethodList、baseProtocols、ivars、baseProperties是一维数组,是只读的,包含了类的初始内容

    ============真特么枯燥=-=

    哎=||=

    method_t

    • method_t 是针对函数、方法的封装


      image.png
    • IMP 代表函数的具体实现
      image.png
    • SEL代表方法\函数名,一般叫选择器,底层结构和char * 类似
    • 可以通过@selectorsel_registerName()获得
    • 可以通过sel_getName()NSStringFromSelector()转成字符串
    • 不同类中相同名字的方法,所对应的方法选择器是相同的


      image.png
    • types包含了函数返回值,参数编码的字符串

    v16@0:8


    image.png

    Type Encoding

    image.png

    方法缓存

    • Class内部结构中有个方法缓存 cache_t ,用散列表来缓存曾经调用过的方法,可以提高方法的查找速度


      image.png

      散列表存储的原理


      空间换时间.png

    为什么_mask 散列表的长度减一,因为任何数值 & _mask 都会 ≤ _mask
    一旦扩容 mask就变了 所以要清空数组
    那个对象调用方法,这个方法无论是来自父类还是自己都会被存储到这个对象对应的类对象的缓存里面

    相关文章

      网友评论

          本文标题:Runtime知识点整理2

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