07-12、类的本质

类的本质:
类其实也是一个对象, 这个对象会在这个类第一次被使用的时候创建
只要有了类对象, 将来就可以通过类对象来创建实例对象
实例对象中有一个isa指针, 指向创建自己的类对象

类对象中保存了当前对象所有的对象方法
当给一个实例对象发送消息的时候, 会根据实例对象中的isa指针去对应的类对象中查找

Snip20170922_23.png
Snip20170922_25.png

Snip20170922_22.png
Snip20170922_26.png
Snip20170922_27.png
Snip20170922_29.png
Snip20170922_31.png

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


Snip20170922_24.png
Snip20170922_30.png
类的本质的总结(重要)

每个对象都有isa,实例对象的isa指向类对象,类对象的isa指向元类对象,元类对象的isa指向根元类对象,根元类对象的isa指向自己。根元类对象就是NSObject元类对象。
知道isa的指向之后还要知道继承关系:“类对象”的继承关系就是“元类对象”的继承关系,为什么这样继承呢?这样继承的目的是为了方法(类对象方法和类方法)的查找,因为类对象里主要存储的是属性和对象方法列表,而元类对象中主要存储的是类方法列表,而调用方法然后去查找方法的顺序是:先在当前类中找,找不到根据继承关系去父类中找,那么无论查找对象方法还是类方法都是先在当前类中找,找不到根据继承关系去父类中找,类对象方法调用查找就是先在当前类对象中找,找不到根据继承关系去父类对象中找。类的对象方法调用查找就是先在当前类对象中找,找不到根据继承关系去父类对象中找,而类的类方法调用查找是在当前类元类对象中找,找不到根据继承关系去父类的元类对象中找。

注意:通过对类的本质学习可以通过C语言模拟一个OC的类。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,775评论 0 9
  • 前言 今天整理了下自己电脑里的一些碎片笔记,时间有限只整理了这篇文章——类的本质,大家可以进行参考。 1.本质 类...
    VV木公子阅读 2,189评论 3 17
  • 参考链接: http://www.cnblogs.com/ioshe/p/5489086.html 简介 Runt...
    乐乐的简书阅读 2,156评论 0 9
  • 参考文章 清晰理解Objective-C元类object_getClass(obj)与[obj class]的区别...
    黑化肥发灰阅读 1,059评论 0 51
  • 1.理解NSObject和元类 1.1 在OC中的对象和类是什么 对象是在objc.h中定义的 类是在runtim...
    HWenj阅读 942评论 0 3