Objective-C高級(jí)編程:iOS內(nèi)存管理和引用計(jì)數(shù)

1.自動(dòng)引用計(jì)數(shù)
在NSObject類的alloc類方法上設(shè)置斷點(diǎn),追蹤程序的執(zhí)行。以下列出執(zhí)行所調(diào)用的方法和函數(shù)。
+alloc;
+allocWithZone;
class_createInstance;
calloc
各個(gè)方法都通過(guò)同一個(gè)調(diào)用_CFDoExternRefOperation函數(shù),調(diào)用了一系列名稱相似的函數(shù)。蘋果的實(shí)現(xiàn)大概就是采用離散列表(引用計(jì)數(shù)表)來(lái)管理引用計(jì)數(shù)

屏幕快照 2017-02-05 下午3.27.38.png

通過(guò)引用計(jì)數(shù)表管理引用計(jì)數(shù)的好處
1.對(duì)象用內(nèi)存塊的分配無(wú)需考慮內(nèi)存塊頭部
2.引用計(jì)數(shù)表各記錄存有內(nèi)存塊地址,可從各個(gè)記錄追溯到各對(duì)象的內(nèi)存塊,方便檢查內(nèi)存泄漏

2.autorelease

NSRunloop每次循環(huán)過(guò)程中NSAutoreleasePool對(duì)象被生成或廢棄

NSAutoreleasePool *pool  =  [ [NSAutoreleasePool alloc]init];
id obj  =  [ [NSObject alloc]  init];
[obj autorelease];
[pool drain]

autorelease 實(shí)例方法的本質(zhì)就是調(diào)用NSAutoreleasePool對(duì)象的addObject類方法

[NSAutoreleasePool showPools];
會(huì)將現(xiàn)在的NSAutoreleasePool的狀況輸出到控制臺(tái)

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

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

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