美文网首页
Runtime 之 Class结构

Runtime 之 Class结构

作者: 有梦想的狼 | 来源:发表于2020-03-05 10:21 被阅读0次

    Class的结构

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

      1.1 散列表:
      @selector() & _mask 的值作为在散列表中的下标来存储方法,并且SEL作为key, 函数的内存地址作为value;如果算出来的下标中已有值,那么mask减1,重新计算下标,直到mask为0,然后对这个散列表清空并且扩容,然后继续进行方法的缓存。

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

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

    method_t的结构:

    method_t是对方法\函数的封装。 method_t
    • SEL代表方法\函数名,一般叫做选择器,底层结构跟char *类似
      1.1. 可以通过@selector()和sel_registerName()获得
      1.2. 可以通过sel_getName()和NSStringFromSelector()转成字符串
      1.3. 不同类中相同名字的方法,所对应的方法选择器是相同的


      image.png
    • types包含了函数返回值、参数编码的字符串 image.png
    • IMP代表函数的具体实现: IMP

    Type Encoding:

    iOS中提供了一个叫做@encode的指令,可以将具体的类型表示成字符串编码


    Type Encoding

    相关文章

      网友评论

          本文标题:Runtime 之 Class结构

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