2018-07-03

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)試命令

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 30,245評論 8 265
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,067評論 0 9
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,663評論 1 32
  • Objective-C語言是一門動態(tài)語言,它將很多靜態(tài)語言在編譯和鏈接時期做的事放到了運行時來處理。這種動態(tài)語言的...
    有一種再見叫青春閱讀 677評論 0 3
  • 原文出處:南峰子的技術(shù)博客 Objective-C語言是一門動態(tài)語言,它將很多靜態(tài)語言在編譯和鏈接時期做的事放到了...
    _燴面_閱讀 1,422評論 1 5

友情鏈接更多精彩內(nèi)容