本系列主要是看完MJ的OC底層原理課程所寫的總結,希望自己能加深對iOS底層的瞭解。
例項物件
- 成員變數的具體值,存放在instance物件
類物件
- 物件方法、屬性、成員變數、協議資訊,存放在class物件中
Meta-Class物件
- 類方法,存放在meta-class物件中
- 可以通過__class_isMetaClass([NSObject class]) __ 來判斷是否Meta-Class物件
NOTE
[[NSObject class] class] 返回的都是類物件 訊息的主體還是NSObject
複製程式碼
物件的isa指標指向哪裡?
- instance物件的isa指標指向class物件
- class物件的isa指向meta-class物件
- meta-class物件的isa指向基類的meta-class物件
當呼叫__物件方法__時,物件方法__儲存在__類__的方法列表中,通過isa
__找到物件的類進行呼叫
當呼叫__類方法__時,類方法__儲存在__Meta_Class__的方法列表中,通過isa
__找到類的Meta_Classs進行呼叫
SuperClass指標指向父類
主要作用是找到父類,呼叫父類的資源
-
子類物件要呼叫父類的物件方法(
物件方法存放在類中
),通過isa
指標找到自己的類,自己的類通過superClass找到父類,從父類的方法列表中找到呼叫的方法 -
子類要呼叫父類的類方法(
類方法在meta-class物件中
)通過isa
指標找到自己的meta-class,meta-class通過superClass找到父類,從父類的類方法列表中找到呼叫的方法Note:
注意由於NSObject的superclass指向的是NSObject自己,如果通過Category給NSObject新增方法,當NSObject子類沒有實現該方法時,系統會來到NSObject的方法列表進行查詢,如果找到同名的方法就會直接呼叫