美文网首页
iOS学习-OC对象的本质2

iOS学习-OC对象的本质2

作者: 快乐的tomato | 来源:发表于2020-06-12 16:48 被阅读0次

    一、OC对象的类型

    1、instance 对象(实例对象)

    • what

    实例对象,通过alloc出来的对象,每次alloc都会产生新的对象,分别占据着不同的内存

    • 在内存中存储的信息
      isa指针、成员变量的值


      image.png

    2、class 对象

    获取类对象的方法

    Class objectClass1 = [obj class];
    Class objectClass2 = object_getClass(obj);
    

    类对象都是同一个对象,在内存中有且只有一个Class对象

    • 在内存中存储的信息
      isa指针、superclass指针
      类的属性信息(@property)、类的成员变量信息(ivar)
      类的对象方法信息、类的协议信息(protocol)、
    image.png

    3、meta-class 对象

    获取元类对象的方法

    Class metaClass = object_getClass([NSObject class]);
    

    在内存中有且只有一个meta-class对象

    • 在内存中存储的信息
      isa指针、superclass指针
      类的类方法信息


      image.png

    isa的指向图


    image.png

    从arm64开始,isa并不是直接指向上一级,而是要经过&ISA_MASK,得到上一级的地址。


    image.png

    4、isa和superclass的总结

    接下来的部分有的绕,需要好好理解
    上面我们知道了对象、类对象、和元类对象是个啥了,以及知道了每个存储了什么东西
    假设有
    类NSObject、 类Person、类Student、对象xiaoming
    这4个玩意,其中xiaoming是Student的实例对象、Student继承Person、Person继承NSObject

    处理过的流程图.png

    由图可知 ,实例对象的isa指向类对象,类对象的isa指向元类对象,元类对象的isa指向基类的元类对对象
    调用方法就跟着箭头的指向寻找,比如xiaoming要调用Peron的方法1,xiaoming先通过isa指针找到Student,Student通过superclass指针找到Person,再调用相对应的方法

    5、class对象的结构

    相关文章

      网友评论

          本文标题:iOS学习-OC对象的本质2

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