美文网首页
Objective-C对象的分类

Objective-C对象的分类

作者: liangtong | 来源:发表于2019-01-26 13:44 被阅读0次
    分类.png

    Ojbective-C对象

    • instance 实例对象:就是通过类alloc出来的对象,每次调用alloc都会产生出来一个新对象
      • isa指针
      • 其他成员变量的值
    • class 类对象:每个类在内存中有且只有一个类对象
      • isa指针
      • superclass指针
      • 类的属性信息(@property)
      • 类的对象方法信息(instance method)
      • 类的协议信息(protocol)
      • 类的成员变量信息(ivar)
    • meta-class 元类对象:每个类在内存中有且只有一个。元类对象元类对象的结构和类对象的结构相同,但是用途不一样。元类对象在内存中存储的信息主要包括
      • isa指针
      • 类方法信息(class method)

    流程.png

    isa指针

    注:实例对象isa地址不是直接对应类对象的地址,类对象的isa地址也不是直接对应元类对象 的地址,在64bit开始,isa需要进行一次位运算才能计算出真正地址。

    • instance的isa指向class
      • 当调用对象方法(instance method)时,通过instance的isa找到class。
        • 如果找到对象方法的实现进行调用。
        • 如果找不到,则通过class的superclass找到父类,然后找父类的方法实现
    • class的isa指向meta-class
      • 当调用类方法(class method)时,通过class对象的isa找到元类对象,
        • 如果找到类方法调用。
        • 如果找不到,则通过superclass找父类,然后找父类的类方法
    • meta-class的isa指向基类的meta-class

    superclass

    • class的superclass指向父类的class,如果没有父类,则superclass指向nil
    • meta-class的superclass指向父类的meta-class。基类的meta-class的superclass指向基类的class

    OC的类信息存放位置

    • 成员变量的具体的值,存放在实例对象instance里。
    • 属性信息、对象方法、协议信息、成员变量信息,存放在类对象class里。
    • 类方法信息,存放在元类对象meta-class里。

    相关文章

      网友评论

          本文标题:Objective-C对象的分类

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