Objective-C 对象模型及类与元类

对象、类与元类的关系

从图中可以看出:一个实例对象的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.类描述了对象的特点,如成员变量、方法列表等,元类描述了类的特点,如类的类方法等

你可能感兴趣的:(Objective-C 对象模型及类与元类)