- 每一個(gè)對(duì)象內(nèi)部都有一個(gè) isa 指針,指向他的類對(duì)象耍缴,類對(duì)象中存放著本對(duì)象的:
- 對(duì)象方法列表(對(duì)象能夠接收的消息列表,保存在它所對(duì)應(yīng)的類對(duì)象中)挽霉。
- 成員變量的列表防嗡。
- 屬性列表。
- 類對(duì)象內(nèi)部也有一個(gè) isa 指針指向元對(duì)象(meta class)侠坎,元對(duì)象內(nèi)部存放的是類方法列表蚁趁。
- 類對(duì)象內(nèi)部還有一個(gè) superclass 的指針,指向他的父類對(duì)象实胸。
- 所有父類的成員變量和自己的成員變量都會(huì)存放在該對(duì)象所對(duì)應(yīng)的存儲(chǔ)空間中他嫡。
Objective-C 對(duì)象的結(jié)構(gòu)圖:
- isa 指針
- 根類的實(shí)例變量
- 倒數(shù)第二層父類的實(shí)例變量
- …
- 父類的實(shí)例變量
- 類的實(shí)例變量
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
}