1、对象的分类
对象分为三类
instance 对象(实例对象)
class 对象(类对象)
meta-class 对象(元类对象)
instance 对象
在内存中存储的信息包括:
- isa指针
- 其他成员变量 【值】
class 对象
在内存中存储的信息包括:
- isa指针
- superclas指针
- 类的属性信息(@property)【名字,类型等】
- 类的对象方法信息(instance method)【名字,类型等】
- 类的协议信息(protocol)【名字,类型等】
- 类的成员变量信息(ivar)【名字,类型等】
- ...
meta-class 对象
在内存中存储的信息包括:
- isa指针
- superclas指针
- 类的类方法信息(class method)
- ...
isa/superclass 指向图
每一个类在内存中有且只有一个类对象
每一个类在内存中有且只有一个元类对象
面试题
1、一个 NSObject 对象占用多少内存?
NSObject 中只有 isa 指针,所以占用一个指针所占用的大小(64位:8个字节,32位:4个字节)
iOS底层做了处理最少分配16个字节,所以分配了16个字节,但是真正只占用了8个字节,后8个字节是空的
2、对象的isa指针, superclass指针指向哪里?
instance的isa指向class
class的isa指向meta-class
meta-class的isa指向基类meta-class
class的superclass指向父类的class
• 如果没有父类,则指向nil
meta-class的superclass指向父类的meta-class
• 基类的meta-class的superclass指向基类class
3、OC的类信息存放在哪里?
成员变量的具体值存放在instance对象
对象方法、协议、属性、成员变量信息存放在class对象
类方法信息存放在meta-class对象