一个Objective-C对象如何进行内存布局?(考虑有父类的情况)
?
?
1.對象isa指向類對象,類對象的isa指向元類。元類isa指向根元類。根元類的isa指針指向自己,superclass指針指向NSObject類
2.實例對象結(jié)構(gòu)體只有一個isa變量,指向?qū)嵗龑ο笏鶎俚念悺n悓ο笥衖sa,superclass,方法,屬性,協(xié)議列表,以及成員變量的描述。
3.所有的對象調(diào)用方法都是一樣的,沒有必要存在對象中,對象可以有無數(shù)個,類對象就有一個所以只需存放在類對象中
? ??
?
可以從官方objc.h源碼里面找到實例定義| ? ??/// Represents an instance of a class. ? ? struct objc_object { ? ? ? ? Class _Nonnull isa? OBJC_ISA_AVAILABILITY; ? ? }; |
可以在runtime.h里面找到類對象的定義
| ? ?? ? ? struct objc_class { ? ? ? ? Class _Nonnull isa? OBJC_ISA_AVAILABILITY; ?? ? ? ? #if !__OBJC2__ ? ? ? ? //向該類所繼承的父類對象 ? ? ? ? Class _Nullable super_class? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OBJC2_UNAVAILABLE; ? ? ? ? const char * _Nonnull name ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OBJC2_UNAVAILABLE; ? ? ? ? long version ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OBJC2_UNAVAILABLE; ? ? ? ? long info? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OBJC2_UNAVAILABLE; ? ? ? ? long instance_size ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OBJC2_UNAVAILABLE; ? ? ? ? //成員變量列表 ? ? ? ? struct objc_ivar_list * _Nullable ivars? ? ? ? ? ? ? ? ? OBJC2_UNAVAILABLE; ? ? ? ? //方法列表 ? ? ? ? struct objc_method_list * _Nullable * _Nullable methodLists? ? ? ? ? ? ? ? ? ? OBJC2_UNAVAILABLE;//方法列表 ? ? ? ? //用于緩存調(diào)用過的方法 ? ? ? ? struct objc_cache * _Nonnull cache ? ? ? ? ? ? ? ? ? ? ? OBJC2_UNAVAILABLE; ? ? ? ? //協(xié)議鏈表用來存儲聲明遵守的正式協(xié)議 ? ? ? ? struct objc_protocol_list * _Nullable protocols? ? ? ? ? OBJC2_UNAVAILABLE; #endif ?? ? ? ? ? ? } |
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/huangzs/p/7574180.html
總結(jié)
以上是生活随笔為你收集整理的一个Objective-C对象如何进行内存布局?(考虑有父类的情况)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件工程实践2017结对作业
- 下一篇: Javascript 多线程?