OC底層原理之實例、類對象、元類對象

本系列主要是看完MJ的OC底層原理課程所寫的總結,但願本身能加深對iOS底層的瞭解。ui

實例對象

  • 成員變量的具體值,存放在instance對象

類對象

  • 對象方法、屬性、成員變量、協議信息,存放在class對象中

Meta-Class對象

  • 類方法,存放在meta-class對象中
  • 能夠經過__class_isMetaClass([NSObject class]) __ 來判斷是否Meta-Class對象

NOTEspa

[[NSObject class] class] 返回的都是類對象  消息的主體仍是NSObject
複製代碼

對象的isa指針指向哪裏?

  • instance對象的isa指針指向class對象
  • class對象的isa指向meta-class對象
  • meta-class對象的isa指向基類的meta-class對象

當調用__對象方法__時,對象方法__保存在__類__的方法列表中,經過isa__找到對象的類進行調用指針

當調用__類方法__時,類方法__保存在__Meta_Class__的方法列表中,經過isa__找到類的Meta_Classs進行調用code

SuperClass指針指向父類

主要做用是找到父類,調用父類的資源cdn

  • 子類對象要調用父類的對象方法( 對象方法存放在類中),經過isa指針找到本身的類,本身的類經過superClass找到父類,從父類的方法列表中找到調用的方法對象

  • 子類要調用父類的類方法(類方法在meta-class對象中)經過isa指針找到本身的meta-class,meta-class經過superClass找到父類,從父類的類方法列表中找到調用的方法blog

    Note:

    ​ 注意因爲NSObject的superclass指向的是NSObject本身,若是經過Category給NSObject添加方法,當NSObject子類沒有實現該方法時,系統會來到NSObject的方法列表進行查找,若是找到同名的方法就會直接調用資源

總結

相關文章
相關標籤/搜索