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

最近又翻開關(guān)于類和元類這個有點雞生蛋的問題(~~),到底這個元類和類是什么關(guān)系呢?我找到那張有名的class diagram圖的原文,查看了一下。

類和元類

Classes and metaclasses這篇文章主要為我們闡述在OC面向?qū)ο笏枷胫校瑢ο?,類和元類的關(guān)系,類作為對象的角度去看OC是如何管理對象、類、元類之間的關(guān)系的。

首先上圖:

class diagram.png

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

注意點

需要弄清的有兩點:
1. 所謂的元類就是根類的元類的一個實例,而根元類的實例就是它自己。
2. 根元類的父類是根類。

類的圖解.png

關(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)系。對類這個概念更加熟悉。

如有不對,歡迎拍磚~

參考文章:

Classes and metaclasses

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容