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