你需要先看一下c語言的結(jié)構(gòu)體指針
元類奢人,類,實(shí)例對象殷勘,很棒
- 當(dāng)你給對象發(fā)送消息時(shí)牛哺,消息是在尋找這個(gè)對象的類的方法列表。
- 當(dāng)你給類發(fā)消息時(shí)劳吠,消息是在尋找這個(gè)類的元類的方法列表引润。
- 元類是必不可少的,因?yàn)樗鎯α祟惖念惙椒ㄑ魍妗C總€(gè)類都必須有獨(dú)一無二的元類淳附。
- 所有的元類都使用根元類(繼承體系中處于頂端的類的元類)作為他們的類。
- 這就意味著所有NSObject的子類(大多數(shù)類)的元類都會以NSObject的元類作為他們的類
isa指針
- 實(shí)例對象的isa --> 類
- 類的isa指針 --> 元類
- 元類的isa指針 -->根元類
- 根類的isa指針 -->根元類
- 根元類的isa指針 --> 根元類自己
superclass指針
- 實(shí)例對象 --> 無superclass
- 類的superclass指針 --> 父類
- 根類superclass指針 --> nil
- 元類superclass指針 --> 元類的基類的父類的元類
- 根元類superclass指針 --> 根元類的基類
Greg Parker給出了一份精彩的元類蠢古,類奴曙,實(shí)例對象圖譜來展示這些關(guān)系
詳解 Objective-C 中的 Runtime
深入Objective-C的動態(tài)特性
初學(xué) Objective-C 時(shí)把[receiver message]當(dāng)成簡單的方法調(diào)用,而無視了“發(fā)送消息”這句話的深刻含義草讶。其實(shí)[receiver message]會被編譯器轉(zhuǎn)化為:
objc_msgSend(receiver, selector)
如果消息含有參數(shù)洽糟,則為:
objc_msgSend(receiver, selector, arg1, arg2, ...)