物件的分類和他們之間的關係

2021-10-02 17:37:00 字數 1763 閱讀 9764

例項物件 instance類物件 class元類物件 meta-class

首先說說三者的結構

下面來看下 class_data_bits_t 中的原始碼

// objc_class繼承於objc_object,因此

// objc_class中也有isa結構體

struct objc_class : objc_object

};

// 類的方法、屬性、協議等資訊都儲存在class_rw_t結構體中

struct class_rw_t

return (class)isa.bits;

#else

// isa_mask的值是0x00007ffffffffff8ull

// 通過按位與的方式獲取到類指標,isa_mask中對應的isa.bits中類指標的位數,均為1

return (class)(isa.bits & isa_mask);

#endif

}

類物件的位址 和 isa_mask做了乙個& 操作 咱們來看看 isa_mask 是什麼

# if __arm64__

# define isa_mask 0x0000000ffffffff8ull

# elif __x86_64__

# define isa_mask 0x00007ffffffffff8ull

arm64 是ios用的值

x86 64 是macos用的值

除錯看下結果

(lldb) p (long)bo->isa

(long) $9 = 8303516107936841

(lldb) p/x bo->isa

(class) $10 = 0x001d800100001449 brother

(lldb) p/x [bo class]

(class) $11 = 0x0000000100001448 brother

(lldb) p/x 0x001d800100001449 & 0x00007ffffffffff8

(long) $12 = 0x0000000100001448

(lldb)

isa & isa_mask 確實得到了類的位址

現在通過類isa指標去找元類試試看

錯誤:成員引用基型別「class」不是結構或聯合

既然它覺得咱們輸出 那咱們搞個相同的結構體 接一下 原來的結構體這樣就可以輸出了

然後和之前一樣 即可得到元類的位址其實也是類的isa指標位址 & isa_mask

isa 確定了 那superclass呢

superclass 並沒有做處理直接就可以找到父類

先到這後面想起來還有什麼相關的再補充

謹以此記錄學習的點點滴滴

CIO和他們的論壇

首席資訊官 cio 需要有乙個他們所喜愛的論壇,說話交友 溝通資訊。國際上,組織 中型企業高峰會 midsize enterprise summit 很有借鑑意義。首先要把何謂 中型企業 定義清楚,具有50 750個職工且本企業年度 it支出達到 100萬歐元以上 其中年度 it支出要達到一定水平是...

物件之間的關係

下面以物件間的耦合度和關係的強弱性的由低到高進行描述 依賴 dependency 物件之間最弱的一種關聯方式,是臨時性的關聯。中一般指由區域性變數 函式引數 返回值建立的對於其他物件的呼叫關係。圖 依賴關係 1 就是乙個物件呼叫被依賴物件中的某些方法而得以完成這個物件的一些職責 2 這是一種比較鬆散...

物件之間的關係

依賴 dependency 物件之間最弱的一種關聯方式,是臨時性的關聯。中一般指由區域性變數 函式引數 返回值建立的對於其他物件的呼叫關係 關聯 association 物件之間一種引用關係,比如客戶類與訂單類之間的關係。這種關係通常使用類的屬性表達。指乙個類指到另乙個類中的屬性.而且是長期的 不帶...