iOS循環(huán)引用/內(nèi)存泄漏檢測(cè)工具

Update Log:
2017.8.24: 初版

2017.10.8: 添加無(wú)法使用的解決辦法

升了xcode9使用這個(gè)工具的時(shí)候發(fā)現(xiàn)不顯示了.原來(lái)需要打開Zombie Objects.打開路徑為 Edit Scheme -> Diagnostics -> 勾選Zombie Objects

一.循環(huán)引用檢查工具

當(dāng)你進(jìn)入一個(gè)vc.然后退出的時(shí)候.發(fā)現(xiàn)他沒(méi)走dealloc方法.

然后把這個(gè)vc里的代碼從頭到尾檢查了一遍.找到了一個(gè)循環(huán)引用的bug,

修復(fù)后,滿心歡喜的運(yùn)行.

進(jìn)入vc再退出發(fā)現(xiàn)還是沒(méi)走dealloc.

不知道你的內(nèi)心如何.反正我的內(nèi)心是毫無(wú)波瀾只有一句***.

現(xiàn)在有個(gè)很好的工具可以直接顯示是誰(shuí)強(qiáng)引用了這個(gè)vc.不需要你從頭到尾一行行找.

二.工具使用方法

這個(gè)是xcode自帶工具.不過(guò)只能在模擬器下使用.

1.首先進(jìn)入你覺(jué)得可能沒(méi)有被正常釋放的vc.然后退出.

2.點(diǎn)擊調(diào)試工具欄里的Debug Memory Graph工具.如圖.

3.搜索你覺(jué)得可能沒(méi)被釋放的VC的類名

進(jìn)入Debug Memory Graph工具后.
在左側(cè)搜索欄搜索你覺(jué)得可能沒(méi)被釋放的VC的類名.
在圖中2處就可以找到該類(如果他確實(shí)沒(méi)被釋放就一定能找到他)

還可以查看類后面的數(shù)字(即該類現(xiàn)在在內(nèi)存里存在的實(shí)例數(shù)量).
如果數(shù)量過(guò)多也可能內(nèi)存泄漏了.可以檢查一下這個(gè)類存在這么多實(shí)例正不正常.

4.在右側(cè)觀看誰(shuí)強(qiáng)引用了該vc.導(dǎo)致他沒(méi)被釋放.

這里很明顯該VC被block強(qiáng)引用了.
該block是被VideoApi持有的.

5.定位代碼

在該vc類文件里搜索VideoApi關(guān)鍵字.
發(fā)現(xiàn)在api的回調(diào)block里使用了 _page.
沒(méi)有使用weakself調(diào)用. (應(yīng)該使用self->_page)
導(dǎo)致了內(nèi)存泄漏.

6.恩.大吉大利.晚上吃雞!

最后編輯于
?著作權(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)容