OC底層原理之例項、類物件、元類物件

yelan_發表於2019-03-17

本系列主要是看完MJ的OC底層原理課程所寫的總結,希望自己能加深對iOS底層的瞭解。

例項物件

OC底層原理之例項、類物件、元類物件

  • 成員變數的具體值,存放在instance物件

類物件

OC底層原理之例項、類物件、元類物件

  • 物件方法、屬性、成員變數、協議資訊,存放在class物件中

Meta-Class物件

OC底層原理之例項、類物件、元類物件

  • 類方法,存放在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的方法列表進行查詢,如果找到同名的方法就會直接呼叫

總結

OC底層原理之例項、類物件、元類物件

相關文章