窺探NSObject

weixin_33850890發表於2018-03-19

NSObject是基於 C C++ 結構體來實現的,可以理解為下圖

1203067-295a01a1668413cf.png
?NSObject ?結構體


1203067-a734b73d39b6a1e6.png
程式碼說明

網上很多教程都有如下圖介紹:

1203067-493ce2eb20272d16.png
已經過時的結構圖


1203067-1200133b9cf36986.png
最新的結構圖


1203067-eeee780aa3e51faf.png
objc_class


1203067-6871eadf441acb03.png
info
1203067-d19ffbedfee40866.png
最新的整體結構

1. 如果是instance物件,isa指向class物件

2. 如果是class物件,isa指向meta-class(元類)物件

3. 如果是meta-class物件的isa指向基類的meta-class物件

類資訊存放在哪裡?

1. 如果是成員變數的具體值存放在instance物件中

2. 物件方法/協議/屬性/成員變數資訊存放在class物件中

3. 類方法資訊存放在meta-class 物件中

1203067-cce78cca0f9c0adc.png
class資訊


1203067-dbd4adbcca8f9f33.png
meta-class資訊


1203067-87f5ab47a9e8467a.png
官方示意圖

相關文章