- 每一个对象内部都有一个 isa 指针,指向他的类对象,类对象中存放着本对象的:
- 对象方法列表(对象能够接收的消息列表,保存在它所对应的类对象中)。
- 成员变量的列表。
- 属性列表。
- 类对象内部也有一个 isa 指针指向元对象(meta class),元对象内部存放的是类方法列表。
- 类对象内部还有一个 superclass 的指针,指向他的父类对象。
- 所有父类的成员变量和自己的成员变量都会存放在该对象所对应的存储空间中。
Objective-C 对象的结构图:
- isa 指针
- 根类的实例变量
- 倒数第二层父类的实例变量
- …
- 父类的实例变量
- 类的实例变量
image
typedef struct objc_class *Class;
typedef struct objc_object {
Class isa;
} *id;
struct objc_class {
Class _Nonnull isa OBJC_ISA_AVAILABILITY;
#if !__OBJC2__
Class _Nullable super_class OBJC2_UNAVAILABLE;
const char * _Nonnull name OBJC2_UNAVAILABLE;
long version OBJC2_UNAVAILABLE;
long info OBJC2_UNAVAILABLE;
long instance_size OBJC2_UNAVAILABLE;
struct objc_ivar_list * _Nullable ivars OBJC2_UNAVAILABLE;
struct objc_method_list * _Nullable * _Nullable methodLists OBJC2_UNAVAILABLE;
struct objc_cache * _Nonnull cache OBJC2_UNAVAILABLE;
struct objc_protocol_list * _Nullable protocols OBJC2_UNAVAILABLE;
#endif
}