1,為什么要測(cè)試代碼的內(nèi)存泄露
內(nèi)存的泄露導(dǎo)致我們軟件在運(yùn)行過(guò)程中占用越來(lái)越多的內(nèi)存嫉父,占有資源卻又得不到及時(shí)清理,會(huì)導(dǎo)致我們程序效率越來(lái)越低眼刃,反應(yīng)慢熔号,會(huì)影響我們用戶體驗(yàn),失去市場(chǎng)的競(jìng)爭(zhēng)能力
2鸟整,怎樣使用工具測(cè)試內(nèi)存泄露
首先使用到的Instrument工具Leaks
1引镊,運(yùn)行一段正確的無(wú)bug的demo,運(yùn)行該段代碼,
2弟头,打開xcode中的instrument 吩抓,打開方式:
? ?選擇product -> profile 即可
? ?通過(guò)Xcode來(lái)啟動(dòng)Instruments(啟動(dòng)前必須停止你當(dāng)前的執(zhí)行文件)
選擇第一種啟動(dòng)方式,build成功后跳出Instruments工具赴恨,選擇Leaks選項(xiàng)疹娶,工具顯示效果如下,解釋一下伦连,為什么選擇leaks模板雨饺,但是默認(rèn)情況下還是會(huì)添加Allocations模板,
點(diǎn)擊紅色按鈕惑淳,開始運(yùn)行额港,(這里運(yùn)行了一分鐘直到出現(xiàn)內(nèi)存泄露方可停止)如圖所示
通過(guò)觀察,可以看出紅色的柱子表示內(nèi)存泄露 歧焦,如上圖所示移斩,選擇leak,點(diǎn)擊十字交叉绢馍,選擇call Tree
選擇Call Tree后向瓷,右下角勾選住 Invert Call Tree(倒置call tree),Hide System Libraries(隱藏系統(tǒng)工具)
這時(shí)候內(nèi)存泄露的具體代碼找到了舰涌,在右邊的紅色框框里指定了哪個(gè)方法出現(xiàn)了內(nèi)存泄露猖任。
你只要在這些方法上雙擊,就會(huì)跳轉(zhuǎn)到具體的代碼瓷耙,方便程序員調(diào)試
以此選擇leak超升,點(diǎn)擊十字交叉,選擇Cycles&roots 如圖可以可以看到內(nèi)存泄露地址:
點(diǎn)擊箭頭哺徊,查看結(jié)果室琢,聯(lián)系開發(fā)人員分析結(jié)果
Leaks instrument工具檢查進(jìn)程堆泄露的內(nèi)存。你可以使用該instrument工具配合Allocations instrument工具來(lái)獲取內(nèi)存地址的歷史記錄落追。該instrument工具要求你加載一個(gè)進(jìn)程以便它可以從進(jìn)程啟動(dòng)時(shí)收集數(shù)據(jù)盈滴。
該instrument工具捕獲以下信息:
z內(nèi)存泄露的數(shù)量(The number of leaks)
z每個(gè)泄露內(nèi)存塊的大小(The size of each leak)
z泄露內(nèi)存塊的地址(Address of the leaked block)z泄露對(duì)象的類型(Type of the
leadked object)
詳細(xì)面板的每個(gè)視圖模式以輕微不同的函數(shù)顯示泄露的數(shù)據(jù)轿钠。在列表模式下巢钓,該instrument工具顯示每個(gè)泄露的百分比,而每個(gè)內(nèi)存泄露有助于發(fā)現(xiàn)內(nèi)存泄露的總數(shù)疗垛。在大綱模式下症汹,數(shù)據(jù)被重組以便你可以查看給定的符號(hào)有多少內(nèi)存泄露。對(duì)于任何模式的條目贷腕,在擴(kuò)展詳細(xì)面板顯示內(nèi)存泄露引發(fā)的深入棧跟蹤信息背镇。
Egt??^???