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]) | 类对象的“类” | 存储类方法(+ 方法) |