作者 TommyWu
本文 408 字,阅读预计需要 3 分钟
0 次阅读
标签
目录展开
目录

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 的实例对象,类对象,元类对象
接着阅读
相关推荐
【iOS】Runtime - Part 1 && 对象与类的本质从 objc_object、isa_t、Tagged Pointer、对象内存布局一路拆到类与对象的本质,梳理 Objective-C Runtime 中对象如何关联到类。原创文章【iOS】Runtime - Part 3 && Category:加载、覆盖与关联对象承接对象/类结构与消息发送机制,梳理 Category 的编译产物、运行时加载、方法列表附加、同名方法覆盖现象、+load/+initialize 差异与关联对象原理。原创文章【iOS】OC语言学习 —— 重点内容总结与拓展(上)目录 隐藏和封装 访问控制符 理解@package访问控制符 对象初始化 一、为对象分配空间 二、初始化方法与对象初始化 OC属性及属性关键字 类、元类、父类的关系 isKindOfClass && isMemberOfClass 关键字 单例模式 基本创建 使用dispatch原创文章