不寒暄直接切入主題
問題:
1 class 底層結構包含什么屬性
2 實例變量存在底層哪里
3 屬性底層如何存放
4普通方法的存放
5類方法的存放
#import
NS_ASSUME_NONNULL_BEGIN
@interface?LGPerson : NSObject{
? ? NSString*hobby;
}
@property?(nonatomic,?copy) NSString *nickName;
- (void)sayHello;
+ (void)sayHappy;
@end
首先我們定義一個類,里面有?hobby成員變量,nickName屬性,?sayHello方法和一個sayHappy類方法
定義一個? ? ? ? LGPerson*person = [LGPerson?personalloc];;萬物結對象
通過? ? ? ? Class pClass =object_getClass(person);拿到當前對象的class

Class->objc_class->objc_object 繼承關系
objc_class該類里面是有三個屬性加父類一個屬性總共是四個屬性
?Class_Nonnull?isa? OBJC_ISA_AVAILABILITY;
? ? Class superclass; // 8
? ? cache_t cache;? ? // 16? ? ??
? ? class_data_bits_t bits;?



打印上述所拿到class
(lldb)?x/4gx pClass
0x1000025f8: 0x001d8001000025d1 0x0000000100b38140
0x100002608: 0x0000000100f49350 0x0000000400000007
四個屬性對應四個地址
即 isa ->0x001d8001000025d1? ? 8位
superclass ->0x0000000100b38140? 8位
cache->0x0000000100f49350? 16位
class_data_bits_t->0x0000000400000007
第一位 isa跟類的關系驗證
(lldb)?po 0x001d8001000025d1 & 0x00007ffffffffff8
LGPerson
isa 與上 掩碼 就是當前類

第二位 superclass驗證?
(lldb)?po 0x0000000100b38140
NSObject??
打印superclass內(nèi)存地址驗證LGPerson 繼承與NSObject
第三位??cache? 先不做驗證,為啥,因為我也不知道 捂臉.jpg
第四位 bits重點 探討
class_data_bits_t bits;
? ? class_rw_t*data() {?
?returnbits.data();
? ? }

可知 data該函數(shù)bits可調(diào),進class_rw_t

是不是若有所思,對屬性,方法,都在這個里面
我們一步一步進行打印
(lldb)?x/4gx pClass
0x100002600: 0x001d8001000025d9 0x0000000100b38140
0x100002610: 0x00000001018205f0 0x0000000300000003

0x100002600 這個東西為該類地址,也是該類第一個屬性isa的地址
為啥,因為類的第一個屬性的地址就是該類的地址
isa->8位? superclass->8位 cache->16位,可知第一個屬性地址評議32位幾位第四位屬性地址

bits 數(shù)據(jù)打印
直接取 $3里面的數(shù)據(jù),

是不是,不是很驚訝
其實,還有更驚訝的就是 ro,哪來ro

下圖 class_ro_t 內(nèi)部構造

我們接著打印ro,一定要把所謂的成員變量,屬性,類方法拋出來

ivars->存儲成員變量
為什么我只定義了一個 hobby? _nickName哪來的,
因為屬性在編譯時會生成一個_屬性名的實例變量
下面屬性

屬性存在于baseProperties?
對就是這個nickName ,count=1 只有這么一個
下面方法
count = 4
LGPerson sayHello]
[LGPerson .cxx_destruct]
[LGPerson nickName]
[LGPerson setNickName:]
屬性在編譯的時候回自動生成setter getter 方法
問題來了+ (void)sayHappy; 這個類方法呢
編譯完了該類居然沒有
下面我們用一個某人居然說笨的方法來查找一下

看見沒有元類里面居然有該方法的地址
說明實例變量編譯到了元類里面
-------------------------------------戛然而止分界線------------------------------------------------------------------
此次Class結探討完畢, 由于技術不是很純屬,不足之處還請大神賜教?