關(guān)于Objc中的類和元類

最近又翻開(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)系的。

首先上圖:

class diagram.png

如上圖,對(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. 根元類的父類是根類。

類的圖解.png

關(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ì),歡迎拍磚~

參考文章:

Classes and metaclasses

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,789評(píng)論 0 9
  • 翻譯參考鏈接:[objc 解釋]:類和元類 英文原文:[objc explain]: Classes and me...
    kakukeme閱讀 1,033評(píng)論 0 51
  • 首先說(shuō)明,這篇文章幾乎都是抄錄的別人的博客,簡(jiǎn)書文章,在此總結(jié),只是為了方便記憶和以后閱讀,如果有什么失禮的地方,...
    LiYaoPeng閱讀 5,072評(píng)論 1 14
  • 參考文章 清晰理解Objective-C元類object_getClass(obj)與[obj class]的區(qū)別...
    黑化肥發(fā)灰閱讀 1,059評(píng)論 0 51
  • 我們常常會(huì)聽(tīng)說(shuō) Objective-C 是一門動(dòng)態(tài)語(yǔ)言,那么這個(gè)「動(dòng)態(tài)」表現(xiàn)在哪呢?我想最主要的表現(xiàn)就是 Obje...
    Ethan_Struggle閱讀 2,232評(píng)論 0 7