最近又翻開(kāi)關(guān)于類和元類這個(gè)有點(diǎn)雞生蛋的問(wèn)題(~~),到底這個(gè)元類和類是什么關(guān)系呢?我找到那張有名的
class diagram
圖的原文,查看了一下。
類和元類
Classes and metaclasses這篇文章主要為我們闡述在OC面向?qū)ο笏枷胫校瑢?duì)象,類和元類的關(guān)系,類作為對(duì)象的角度去看OC是如何管理對(duì)象、類、元類之間的關(guān)系的。
首先上圖:
如上圖,對(duì)象是由按照類所定義的各個(gè)屬性和方法“制造”的,類作為對(duì)象的模板,也可看成是對(duì)象。正如工廠里面的模子也是要專門制作模子的機(jī)器生產(chǎn),元類
(meta class)就是設(shè)計(jì)、管理類
(class)的角色。所以圖上直觀的表現(xiàn)出類和元類平行的父類鏈,表明實(shí)例方法和類方法都是并行繼承的,每個(gè)對(duì)象都響應(yīng)了根類的方法。
注意點(diǎn)
需要弄清的有兩點(diǎn):
1. 所謂的元類就是根類的元類的一個(gè)實(shí)例,而根元類的實(shí)例就是它自己。
2. 根元類的父類是根類。
關(guān)于這兩點(diǎn),原文是這樣描述的:
A metaclass is an instance of the root class's metaclass; the root metaclass is itself an instance of the root metaclass.
所謂的元類就是根類的元類的一個(gè)實(shí)例。
第二點(diǎn): And the root metaclass's superclass is the root class,就說(shuō)名根元類
(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)系。對(duì)類這個(gè)概念更加熟悉。
如有不對(duì),歡迎拍磚~