最近又翻開關(guān)于類和元類這個有點雞生蛋的問題(~~),到底這個元類和類是什么關(guān)系呢?我找到那張有名的
class diagram圖的原文,查看了一下。
類和元類
Classes and metaclasses這篇文章主要為我們闡述在OC面向?qū)ο笏枷胫校瑢ο?,類和元類的關(guān)系,類作為對象的角度去看OC是如何管理對象、類、元類之間的關(guān)系的。
首先上圖:

如上圖,對象是由按照類所定義的各個屬性和方法“制造”的,類作為對象的模板,也可看成是對象。正如工廠里面的模子也是要專門制作模子的機器生產(chǎn),元類(meta class)就是設(shè)計、管理類(class)的角色。所以圖上直觀的表現(xiàn)出類和元類平行的父類鏈,表明實例方法和類方法都是并行繼承的,每個對象都響應(yīng)了根類的方法。
注意點
需要弄清的有兩點:
1. 所謂的元類就是根類的元類的一個實例,而根元類的實例就是它自己。
2. 根元類的父類是根類。

關(guān)于這兩點,原文是這樣描述的:
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)的。
后續(xù)關(guān)注
- isa指針的作用
- 類在堆上的內(nèi)存分配
總結(jié)
理解類與元類的關(guān)系有利理解OC面向?qū)ο蟮乃枷?,了解類的繼承關(guān)系。對類這個概念更加熟悉。
如有不對,歡迎拍磚~