參考資料
南峰子的runtime 一
【OC刨根問底】Runtime簡單粗暴理解
對象的理解,元類(meta class) 和 isa
iOS機(jī)制中,對象包括:類對象和實例對象
- 實例對象
- 對于實例對象,
isa是在分配內(nèi)存等初始化操作的時候創(chuàng)建的.分配內(nèi)存的時候創(chuàng)建了一個結(jié)構(gòu)體,objc_objcet,體內(nèi)有一個isa指針,指向本對象所屬的類(或者說類對象),同時生成的id指針指向自己。
- 對于實例對象,
- 類對象
- 所有的類本身也是一個對象,類對象所屬的類,叫做元類
meta class,isa指向meta class - 類中所有的方法,包括實例化方法和類方法,都存放在
meta class中,meta class的isa最終指向根類的meta class -
NSObject的meta class指向本身
- 所有的類本身也是一個對象,類對象所屬的類,叫做元類
- 這里需要注意的是:我們在一個類對象調(diào)用class方法是無法獲取meta-class,它只是返回類而已。
-
參照下圖,
示意圖
示例說明
[[NSObject alloc] init]
-
NSObject是一個類對象,+ alloc是一個類方法,[NSObject alloc]isa先找到NSObject的meta class中有沒有alloc方法. -
[[NSObject alloc]返回了一個實例化對象.isa就指向了這個對象所屬的類,還是NSObject,去找有沒有init方法。
