isa:是一个Class 类型的指针. 每个实例对象有个isa的指针,他指向对象的类,而Class里也有个isa的指针, 指向meteClass(元类)。元类保存了类方法的列表。当类方法被调用时,先会从本身查找类方法的实现,如果没有,元类会向他父类查找该方法。同时注意的是:元类(meteClass)也是类,它也是对象。元类也有isa指针,它的isa指针最终指向的是一个根元类(root meteClass).根元类的isa指针指向本身,这样形成了一个封闭的内循环。
元类:元类是类对象的类,类对象是元类的实例。
1.我们以前调用"+"开头的类方法实际是在调用元类的对象方法
2.由于每个类有且只有一个,所以每个类对象都是其对应元类的单例
1.每个实例对象的类都是类对象,每个类对象的类都是元类对象,每个元类对象的类都是根元类(root metaclass的isa指向自身)2.类对象的父类最终继承自根类对象NSObject,NSObject的父类为nil3.元类对象(包括根元类)的父类最终继承自根类对象NSObject
可见,类与元类是一个闭环。
网友评论