美文网首页
IOS OC对象底层结构

IOS OC对象底层结构

作者: HelloBinary | 来源:发表于2020-09-01 10:16 被阅读0次

    objc对象的isa指针指向什么?有什么作用?

    isa指针指向的他的类对象,可以找到他的方法
    了解isa记住一张图就好


    image.png
    1. Root class(class)就是NSObject,NSObject是没有超类的,所以其superclass指向nil
    2. 每个Class都有一个isa指针指向唯一的Meta class,里面存放的是类方法,类属性相关的。
    3. Root class(meta)的superclass又指向了NSObject.
    4. 每个Meta class的 isa指针都指向 Root class(meta).
      5.isa定义为一个union 共用体。其结构:


      image.png

    Class的结构


    image.png

    class_rw_t

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


    image.png

    class_ro_t

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


    image.png

    method_t

    method_t 是对函数的封装


    image.png

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

    1. types包含了函数返回值、参数编码的字符串。可以参考下面对应表


      image.png

    cathe_t

    对象方法(msg_send)查找的第一阶段是通过汇编在方法缓存里查找方法,提高效率。
    方法缓存存储在cathe_t,里面是一个一个的buket_t
    buket_t 只存储 的是SEL 和 IMP的键值对


    image.png

    相关文章

      网友评论

          本文标题:IOS OC对象底层结构

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