最近又翻開關(guān)于類和元類這個(gè)有點(diǎn)雞生蛋的問題(~~)汗洒,到底這個(gè)元類和類是什么關(guān)系呢?我找到那張有名的
class diagram
圖的原文父款,查看了一下溢谤。
類和元類
Classes and metaclasses這篇文章主要為我們闡述在OC面向?qū)ο笏枷胫校瑢ο蠛┰埽惡驮惖年P(guān)系世杀,類作為對象的角度去看OC是如何管理對象、類肝集、元類之間的關(guān)系的瞻坝。
首先上圖:
如上圖,對象是由按照類所定義的各個(gè)屬性和方法“制造”的杏瞻,類作為對象的模板所刀,也可看成是對象。正如工廠里面的模子也是要專門制作模子的機(jī)器生產(chǎn)捞挥,元類
(meta class)就是設(shè)計(jì)浮创、管理類
(class)的角色。所以圖上直觀的表現(xiàn)出類和元類平行的父類鏈砌函,表明實(shí)例方法和類方法都是并行繼承的斩披,每個(gè)對象都響應(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寡壮,就說名根元類
(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)系诬像。對類這個(gè)概念更加熟悉。
如有不對闸婴,歡迎拍磚~