概述
OC对象分为三种:
- instance对象(实例对象)
- Class对象(类对象)
- meta-class(元类对象)
一. instance对象(实例对象)
instance对象是类调用alloc方法产生新的实例方法
- alloc:分配内存
- init:初始化
- 一个类及其子类添加方法不会影响instance对象内存分配
- 一个类及其子类添加成员变量或属性会影响instance对象内存分配 实例对象在内存中存储的信息:
- isa指针
- 成员变量的值
二. Class对象(类对象)
每个类在内存中有且仅有一个类对象
类对象在内存中存储的信息:
- isa指针
- superclass指针
- 属性信息
- 实例方法
- 协议信息
- 成员变量信息(名称,类型)
三. meta-class(元类对象)
meta-class存储信息:
- isa指针
- superclass指针
- 类方法信息
isa指针
- instance的isa指向class,当调用对象方法时,通过instance的isa找到class,最后找到对象方法的实现进行调用
- class的isa指向meta-class,当调用类方法时,通过class的isa找到meta-class,最后找到类方法的实现进行调用
- meta-class的isa指向基类的meta-class
- 基类的isa指向自己
- isa找到class,方法不存在,就通过superclass找父类class调用类方法的轨迹
- isa找meta-class,方法不存在,就通过superclass找父类
superclass指针
- class的superclass指针指向父类的class,如果没有父类,superclass指针为nil
- meta-class的superclass指向父类的meta-class,基类的meta-class的superclass指向基类的class