最近又翻开关于类和元类这个有点鸡生蛋的问题(~~),到底这个元类和类是什么关系呢?我找到那张有名的
class diagram
图的原文,查看了一下。
类和元类
Classes and metaclasses这篇文章主要为我们阐述在OC面向对象思想中,对象,类和元类的关系,类作为对象的角度去看OC是如何管理对象、类、元类之间的关系的。
首先上图:
如上图,对象是由按照类所定义的各个属性和方法“制造”的,类作为对象的模板,也可看成是对象。正如工厂里面的模子也是要专门制作模子的机器生产,元类
(meta class)就是设计、管理类
(class)的角色。所以图上直观的表现出类和元类平行的父类链,表明实例方法和类方法都是并行继承的,每个对象都响应了根类的方法。
注意点
需要弄清的有两点:
1. 所谓的元类就是根类的元类的一个实例,而根元类的实例就是它自己。
2. 根元类的父类是根类。
关于这两点,原文是这样描述的:
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面向对象的思想,了解类的继承关系。对类这个概念更加熟悉。
如有不对,欢迎拍砖~