【OC】OC的实例对象,类对象,元类对象

OC的实例对象,类对象,元类对象 在 Objective C 中,一切都是对象 —— 包括“类”本身。它背后的运行机制依赖于一个强大的 元类(metaclass)系统 。 实例对象 类对象 元类对象 是 Objective C Runtime 的三种核心对象,它们构成了类与对象的

作者 TommyWu
封面圖片: 【OC】OC的实例对象,类对象,元类对象

#OC 的实例对象,类对象,元类对象

在 Objective-C 中,一切都是对象 —— 包括 “类” 本身。它背后的运行机制依赖于一个强大的元类(metaclass)系统

  • 实例对象
  • 类对象
  • 元类对象

是 Objective-C Runtime 的三种核心对象,它们构成了类与对象的运行时结构。

#一、实例对象

 通过 [[类名 alloc] init] 或类似方式创建的具体对象,就是实例对象

Person *p = [[Person alloc] init];

此时 p 就是一个实例对象,拥有 person 类定义的所有实例变量、属性、方法等。

#二、类对象

每个类在运行时只有一个类对象,它描述了这个类的结构和行为,是 “类的实例”

Class cls = [Person class];
//或者
object_getClass(p); //获取对象p所属的类

作用:

储存类方法(+ 方法)

存储类名、父类、方法列表、属性列表等

所有实例对象共享这个类对象

#三、元类对象

类对象本身也是一个对象,它是 “某个元类的实例”

元类描述的类对象的行为,即:类方法(+ 方法)实际上存储在元类对象中

Class metaClass = object_getClass([Person class]);

类型 举例 本质 方法存储位置 实例对象 Person *p = [[Person alloc] init] 类的一个具体对象 实例方法(- 方法) 类对象 [Person class] Person 类的唯一对象 类方法在元类中 元类对象 object_getClass ([Person class]) 类对象的 “类” 存储类方法(+ 方法)


原文发布于 CSDN:【OC】OC 的实例对象,类对象,元类对象