美文网首页
关于Objc中的类和元类

关于Objc中的类和元类

作者: 吃蘑菇De大灰狼 | 来源:发表于2016-12-05 14:08 被阅读445次

最近又翻开关于类和元类这个有点鸡生蛋的问题(~~),到底这个元类和类是什么关系呢?我找到那张有名的class diagram图的原文,查看了一下。

类和元类

Classes and metaclasses这篇文章主要为我们阐述在OC面向对象思想中,对象,类和元类的关系,类作为对象的角度去看OC是如何管理对象、类、元类之间的关系的。

首先上图:

class diagram.png

如上图,对象是由按照类所定义的各个属性和方法“制造”的,类作为对象的模板,也可看成是对象。正如工厂里面的模子也是要专门制作模子的机器生产,元类(meta class)就是设计、管理(class)的角色。所以图上直观的表现出类和元类平行的父类链,表明实例方法和类方法都是并行继承的,每个对象都响应了根类的方法。

注意点

需要弄清的有两点:
1. 所谓的元类就是根类的元类的一个实例,而根元类的实例就是它自己。
2. 根元类的父类是根类。

类的图解.png

关于这两点,原文是这样描述的:

A metaclass is an instance of the root class's metaclass; the root metaclass is itself an instance of the root metaclass.

所谓的元类就是根类的元类的一个实例。

第二点: And the root metaclass's superclass is the root class,就说名根元类(Root Class meta)的父类是根类(Root Class class).可以看到图中的根元类(Root Class meta)的superclass是指向根类(Root Class class)的。

后续关注

  • isa指针的作用
  • 类在堆上的内存分配

总结

理解类与元类的关系有利理解OC面向对象的思想,了解类的继承关系。对类这个概念更加熟悉。

如有不对,欢迎拍砖~

参考文章:

Classes and metaclasses

相关文章

网友评论

      本文标题:关于Objc中的类和元类

      本文链接:https://www.haomeiwen.com/subject/cuikmttx.html