OC中对象的定义:
typedef struct objc_object {
Class isa;
}*id;
这个定义表明:只要以指向Class的指针作为首个成员的数据结构都可以被认为是一个对象。
OC中类的定义:
typedef struct objc_class *Class;
struct objc_class{
Class isa;
Class super_class;
/*followed by runtime specific details...*/
};
isa:objec_object(对象)中isa指针指向的类结构称为class(即该对象所属的类),其中存放着普通成员变量与对象方法 ;
类本身也是对象,类对象中isa指针指向的类结构称为metaclass,其中存放着static类型的成员变量与static类型的方法即类方法。
metaclass的isa指针指向metaclass根类的metaclass,metaclass根类的metaclass指向自己,形成一个闭环。
super_class: 指向该类的父类的指针,如果该类是根类(如NSObject或NSProxy),那么super_class就为nil。
下面这张图能很清晰的表明相互间的关系: