OC中類的結構
NSObject
@interface NSObject <NSObject> {
Class isa;
}
其中Class是一個結構(struct)指標
typedef struct objc_class *Class;
其中objc_class結構如下
struct objc_class {
Class isa OBJC_ISA_AVAILABILITY;
#if !__OBJC2__
Class super_class OBJC2_UNAVAILABLE;
const char *name OBJC2_UNAVAILABLE;
long version OBJC2_UNAVAILABLE;
long info OBJC2_UNAVAILABLE;
long instance_size OBJC2_UNAVAILABLE;
struct objc_ivar_list *ivars OBJC2_UNAVAILABLE;
struct objc_method_list **methodLists OBJC2_UNAVAILABLE;
struct objc_cache *cache OBJC2_UNAVAILABLE;
struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;
#endif
} OBJC2_UNAVAILABLE;
怎麼又有一個isa??這些isa到底是什麼?之間有什麼區別和聯絡
objc_class中也有一個isa物件,這是因為一個 ObjC 類本身同時也是一個物件,為了處理類和物件的關係,runtime 庫建立了一種叫做元類 (Meta Class) 的東西,類物件所屬型別就叫做元類,而這個元類同時也是一個根元類 (root meta class) 的例項。所有的元類最終都指向根元類為其超類
objc_ivar_list結構體儲存著objc_ivar陣列列表,而objc_ivar結構體儲存了類的單個成員變數的資訊;同理objc_method_list結構體儲存著objc_method陣列列表,而objc_method結構體儲存了類的某個方法的資訊。
Cache為方法呼叫的效能進行優化,通俗地講,每當例項物件接收到一個訊息時,它不會直接在isa指向的類的方法列表中遍歷查詢能夠響應訊息的方法,因為這樣效率太低了,而是優先在Cache中查詢。Runtime 系統會把被呼叫的方法存到Cache中(理論上講一個方法如果被呼叫,那麼它有可能今後還會被呼叫),下次查詢的時候效率更高。
Ivar是一種代表類中例項變數的型別
typedef struct objc_ivar *Ivar;
結構如下
struct objc_ivar {
char *ivar_name OBJC2_UNAVAILABLE;
char *ivar_type OBJC2_UNAVAILABLE;
int ivar_offset OBJC2_UNAVAILABLE;
#ifdef __LP64__
int space OBJC2_UNAVAILABLE;
#endif
}
相關文章
- ios/oc中的結構體 與字串互轉iOS結構體字串
- OC物件是結構體的驗證物件結構體
- 類檔案結構_class類檔案的的結構
- OC:類與物件☀️物件
- 【Java】類的結構Java
- C++中結構體與類的區別C++結構體
- c#中結構體和類的比較C#結構體
- Python中實現結構體類Python結構體
- 分析oc物件的記憶體結構及其建立過程物件記憶體
- 筆記-資料結構之 Hash(OC的粗略實現)筆記資料結構
- C#中類和結構的一個區別...C#
- C#中誰最快:結構還是類?
- 類和結構
- iOS進階之路 (三)OC物件的原理 - isa 結構 & 走位iOS物件
- iOS探索 類的結構分析iOS
- 結合 category 工作原理分析 OC2.0 中的 runtimeGo
- 用OC認識設計模式(二) 結構型模式設計模式
- 類與結構體結構體
- 類中的結構體或列舉等型別的前置宣告結構體型別
- JavaScript中的程式結構和分支結構JavaScript
- 類的結構之一:屬性
- java容器類的繼承結構Java繼承
- OC isa結構、訊息傳遞、Method Swizzling
- OC中的陣列、字典、集合陣列
- Swift 類與結構體Swift結構體
- golang類和結構體Golang結構體
- Swift,結構體與類Swift結構體
- Class類檔案結構
- 集合框架類結構圖框架
- 深入解析Class類檔案的結構
- php tree類的使用(樹形結構)PHP
- 如何設計優雅的類結構
- javascript中的棧結構JavaScript
- OC學習總結(三)
- OC學習總結(一)
- OC學習總結(二)
- 結構體和類中屬性定義需要static地方結構體
- 初識OC&iOS 類和物件iOS物件