类的本质:
类其实也是一个对象, 这个对象会在这个类第一次被使用的时候创建
只要有了类对象, 将来就可以通过类对象来创建实例对象
实例对象中有一个isa指针, 指向创建自己的类对象
类对象中保存了当前对象所有的对象方法
当给一个实例对象发送消息的时候, 会根据实例对象中的isa指针去对应的类对象中查找







虚线是isa,实线是继承关系


类的本质的总结(重要)
每个对象都有isa,实例对象的isa指向类对象,类对象的isa指向元类对象,元类对象的isa指向根元类对象,根元类对象的isa指向自己。根元类对象就是NSObject元类对象。
知道isa的指向之后还要知道继承关系:“类对象”的继承关系就是“元类对象”的继承关系,为什么这样继承呢?这样继承的目的是为了方法(类对象方法和类方法)的查找,因为类对象里主要存储的是属性和对象方法列表,而元类对象中主要存储的是类方法列表,而调用方法然后去查找方法的顺序是:先在当前类中找,找不到根据继承关系去父类中找,那么无论查找对象方法还是类方法都是先在当前类中找,找不到根据继承关系去父类中找,类对象方法调用查找就是先在当前类对象中找,找不到根据继承关系去父类对象中找。类的对象方法调用查找就是先在当前类对象中找,找不到根据继承关系去父类对象中找,而类的类方法调用查找是在当前类元类对象中找,找不到根据继承关系去父类的元类对象中找。
注意:通过对类的本质学习可以通过C语言模拟一个OC的类。
网友评论