从图中可以看出:一个实例对象的isa指向对象所属的类,这个类的isa指向这个类的元类,而这个元类的isa又指向NSObject的元类,NSObject的元类的isa指向其本身,最终形成形成一个闭环。
在OC中,每一个对象都是类的一个实例,对象的isa指针指向他所属的类,而类本身其实也是一个对象,继承自objc_object,这一点从objc-runtime-new.h中可以看到:
struct objc_class : objc_object {
// Class ISA;
Class superclass;
cache_t cache; // formerly cache pointer and vtable
class_data_bits_t bits; // class_rw_t * plus custom rr/alloc flags
......
当你调用一个类的类方法,如[NSObject alloc]其实是给类对象发送了一个消息, 因为类是一个对象,所以他必须是另外一个类的实例,这个类就是元类,每一个类都有一个isa指针指向这个类所属的类,类的isa指针指向的类就是这个类的元类, 类方法其实是类的元类的实例方法,元类为类对象描述了类方法。
小结:
1.Objective-C中的对象是对C的结构体的封装
2.所有的对象都有一个isa指针,指向对象所属的类,类也是一个对象,类对象的isa指针指向类的元类
3.类描述了对象的特点,如成员变量、方法列表等,元类描述了类的特点,如类的类方法等