OC对象

OC对象

OC对象分类

  • instance对象(实例对象)
  • class对象(类对象)
  • meta对象(元类对象)

对象的结构

  • instance
    • isa指针
    • 其他成员变量
  • class对象
    • isa指针
    • superclass指针
    • 类的属性信息 (@property)
    • 类的对象方法信息 (instance method)
    • 类的协议信息 (protocol)
    • 类的成员变量信息(ivar)
  • meta-class
    • isa指针
    • superclass
    • 类方法信息(class method)

获取类对象

1
2
3
4
Class objectClass = [NSObject class]; // 获取类对象
Class objectClass = object_getClass(object) // 获取类对象
Class metaClass = object_getClass(objectClass) // object_getClass 传类对象获取元类对象
BOOL result = class_isMetaClass([NSObject class]) //判断是否是元类对象

isa指针和superclass

  • instance的isa指向class

  • class的isa指向meta-class

  • meta-class的isa指向基类的meta-class

  • class的superclass指向父类的class

    如果没有父类,superclass指针为nil

  • meta-class的superclass指向父类的meta-class

    基类的meta-class的superclass指向基类的class

  • instance调用对象方法的轨迹

    isa找到class,方法不存在,就通过superclass找父类

  • class调用类方法的轨迹

    isa找meta-class,方法不存在,就通过superclass找父类