NSObject的內(nèi)存本質(zhì)
1.實例化一個NSObject對象
????????(arm64位系統(tǒng)情況下)
NSObject *objc = [[NSObject alloc] init];
打印NSObject實例對象的成員變量objc所占用的大小
NSLog(@"class_getInstanceSize([NSObject class])----%zd",class_getInstanceSize([NSObject class]));
可以得出class_getInstanceSize([NSObject class])----8,
但是如果打印指針所指向的成員變量objc的內(nèi)存大小
(malloc_size 返回的是字節(jié)的大小)
NSLog(@"%zd", malloc_size((__bridge const void *)obj));
則結(jié)果為 16,
通過看源碼可以知道,?class_getInstanceSize 返回的是cls這個對象

調(diào)用的是 alignedInstanceSize 方法

返回的是對齊之后的成員變量的大小
返回的是這個類的成員變量內(nèi)存對齊后所占有的大小.
而在alloc 中,實際上調(diào)用的是?allocWithZone方法 ,具體的實現(xiàn)是

調(diào)用class_createInstance 方法


調(diào)用C語言的calloc方法,size從上面獲得

當開辟的內(nèi)存大小不足16字節(jié)時,變成16字節(jié)
所以,NSObject對象開辟的內(nèi)存大小是CocoaFoundation框架規(guī)定的16字節(jié),但是實際上用到的只是8字節(jié)
LLDB調(diào)試命令
