Object-C isa指針

1.什么是isa指針

概念:

Every object has an isa instance variable that identifies the object's class. The runtime uses this pointer to determine the actual class of the object when it needs to.

每個對象都有一個標識對象類的isa實例變量. 運行時使用此指針來確定對象需要的實際類.(isa 可以理解為這是個什么類).

在xcode中用快捷鍵Shift+Cmd+O 打開文件objc.h 能看到類的定義:



從圖可以看出三點:

  1. id類型是一個objc_object結構體的指針
  2. objc_object結構體包含一個Class類型的變量isa
  3. Class是objc_class結構體的指針.

事實上OC中的runtime中, 類是用objc_class結構體表示的, 對象是用objc_object結構體表示的. 這也就解釋了為什么id類型可以指向OC中任意對象類型了.

objc_class結構體的結構:

struct objc_class {
    Class isa  //所屬類的指針
    Class super_class//指向父類的指針                                        
    const char *name    //類名                                     
    long version            // 版本                                 
    long info                   //供運行期使用的一些位標識。                             
    long instance_size      //實例大小                                 
    struct objc_ivar_list *ivars       //成員變量數組                      
    struct objc_method_list **methodLists  //方法列表                  
    struct objc_cache *cache//指向最近使用的方法.用于方法調用的優(yōu)化                            
    struct objc_protocol_list *protocols//協(xié)議的數組                     
}

看到第一個變量有點崩潰, 但說明了萬物皆對象, 類也是對象, 類是meteClass(元類)的實例.

總結一下:

  • 實例對象在運行時蓓表示成objc_object類型結構體, 結構體內部有isa指針指向objc_class結構體.
  • objc_class內部保存了類的變量和方法列表以及其他信息, 并且還有一個isa指針.這個isa指針指向meteClass(元類), 元類里保存了這個類的類方法列表.
  • 元類里也有isa指針, 這個isa指針指向根源類, 根源類的isa指針指向自己.
    第二個參數superClass的實現:


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 轉至元數據結尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉至元數據起始第一章:isa和Class一....
    40c0490e5268閱讀 2,042評論 0 9
  • 本文轉載自:http://southpeak.github.io/2014/10/25/objective-c-r...
    idiot_lin閱讀 1,027評論 0 4
  • 這篇文章完全是基于南峰子老師博客的轉載 這篇文章完全是基于南峰子老師博客的轉載 這篇文章完全是基于南峰子老師博客的...
    西木閱讀 30,885評論 33 466
  • Objective-C語言是一門動態(tài)語言,它將很多靜態(tài)語言在編譯和鏈接時期做的事放到了運行時來處理。這種動態(tài)語言的...
    有一種再見叫青春閱讀 672評論 0 3
  • 文中的實驗代碼我放在了這個項目中。 以下內容是我通過整理[這篇博客] (http://yulingtianxia....
    茗涙閱讀 1,027評論 0 6

友情鏈接更多精彩內容