靜態(tài)和動(dòng)態(tài)內(nèi)存分析(主講:動(dòng)態(tài)內(nèi)存分析工具Leaks)

實(shí)際開發(fā)中往往會(huì)存在內(nèi)存泄露問題,可能對(duì)于一些程序開發(fā)人員來(lái)說,項(xiàng)目寫完了就完事了,只要能在真機(jī)上運(yùn)行不崩潰即可。但是對(duì)于一些大型項(xiàng)目,對(duì)性能要求還是很高的。這里先將一下內(nèi)存分析相關(guān)的技術(shù),主要是利用Xcode自帶的內(nèi)存分析工具。其實(shí)Xcode的功能很強(qiáng)大,如果只是利用Xcode編寫代碼,并模擬器上運(yùn)行效果,那就太浪費(fèi)資源了。想想一個(gè)4個(gè)多G的代碼編輯工具,功能怎么可能僅僅局限于編寫代碼這么簡(jiǎn)單。
關(guān)于靜態(tài)內(nèi)存分析步多介紹,直接shift+cmd+b就行,但是監(jiān)測(cè)不是很準(zhǔn)確,僅僅只能從語(yǔ)法分析來(lái)監(jiān)測(cè)內(nèi)存泄露。
靜態(tài)內(nèi)存分析:
1、快捷鍵:shift+cmd+b
2、只是簡(jiǎn)單的監(jiān)測(cè)語(yǔ)法缺陷,很多開發(fā)者總是以為只是檢測(cè)內(nèi)存泄露
3、不能完全檢測(cè)到內(nèi)存泄露,只是分析上下語(yǔ)句的邏輯。
4、自能幫我們監(jiān)測(cè)到一部分可能泄露的代碼,具體需要自己判斷處理。

這篇文章真正要將的是動(dòng)態(tài)內(nèi)存分析工具Leaks。
動(dòng)態(tài)內(nèi)存分析:
引言:
1、一般內(nèi)存分析,主要是看看有沒有內(nèi)存泄露。
2、內(nèi)存泄露:創(chuàng)建了對(duì)象,使用完畢沒有釋放,將來(lái)就可能沒有被釋放掉。
3、內(nèi)存泄露:主要用于MRC的內(nèi)存檢測(cè)
4、在ARC在也會(huì)有內(nèi)存泄露的發(fā)生:循環(huán)引用、Core Foundation框架。

首先通過如下操作,代開leaks工具。快捷鍵:cmd+i
product ---> profile ----> leaks。圖的下方有關(guān)于這個(gè)界面的說明。


leaks界面

說明:
1、點(diǎn)擊坐上角的紅點(diǎn)可以開始錄制,檢測(cè)內(nèi)存泄露。錄制時(shí)會(huì)啟動(dòng)模擬器,此時(shí)可以自行操控模擬器,檢測(cè)內(nèi)存泄露。
2、內(nèi)存泄露檢測(cè)時(shí)間間隔為10s。
3、點(diǎn)擊左上角的AllHeap & Anonymous VM可以在底部查看內(nèi)存占用情況,點(diǎn)擊Leak Checks可以查看內(nèi)存泄露情況。
4、如果出現(xiàn)右上角空白區(qū)域的紅色錯(cuò)號(hào),說明存在內(nèi)存泄露。
5、當(dāng)選中做上角的Leak Checks,最下方界面會(huì)出現(xiàn)相應(yīng)變化。leaks可以告訴在那些類中出現(xiàn)內(nèi)存泄露問題。Cycles & Roots可以用圖形來(lái)說明為何出現(xiàn)內(nèi)存泄露。Call Tree可以精準(zhǔn)定位發(fā)生內(nèi)存泄露的代碼。具體請(qǐng)看下圖。

接下來(lái)看一個(gè)重點(diǎn),如何定位發(fā)生內(nèi)存泄露的代碼部分,進(jìn)而根據(jù)實(shí)際代碼邏輯,改寫代碼,優(yōu)化項(xiàng)目。如何定位發(fā)生內(nèi)存泄露的代碼?


如何定位發(fā)生內(nèi)存泄露的代碼


按照上圖:在錄制之后,并檢測(cè)到內(nèi)存泄露,選中左下角模塊的Call Tree ,同事右下角選中設(shè)置中的Hide System Libraries(隱藏系統(tǒng)資源),然后雙擊左下角模塊的方法,便直接跳轉(zhuǎn)到內(nèi)存泄露的地方。另外說明:右下角模塊中的invert Call Tree 是更改方法的組織形式使方法從內(nèi)到外展示。Sepetrate by Thread 是按照線程分割檢測(cè)內(nèi)存泄露。

動(dòng)態(tài)內(nèi)存分析注意事項(xiàng):
1、測(cè)試時(shí),應(yīng)該使用真機(jī),不要使用模擬器。因?yàn)槟M器的性能是和電腦的配置有關(guān)。
2、測(cè)試時(shí),應(yīng)該使用release模式。release模式下,代碼會(huì)自動(dòng)做一些優(yōu)化和精簡(jiǎn)。并且release模式下,“看門狗”機(jī)制將會(huì)被關(guān)閉,因此才會(huì)出現(xiàn)模擬器運(yùn)行沒事,真機(jī)崩潰的情況。

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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