首先交代一下背景:
在 ARC 時代較常見的內(nèi)存泄露是循環(huán)引用導(dǎo)致的,開發(fā)中也較容易被忽略.而蘋果的 Instrument 操作起來既不簡單又不粗暴,而且有些工具還查不出來這類問題.
那么這篇文章適合你嗎?
- 你需要一個簡單粗暴的檢測工具嗎?
- 你是否對當前項目內(nèi)存問題做過整體的跟蹤監(jiān)測?
- 你想要一個即時,精準,讓你無拖延的解決問題的輔助工具嗎?
如果你都不需要,其實你也可以了解一下,因為他并不能耽誤你幾分鐘時間,下面我們來看看如何
使用及效果:
第一步: 通過 pod 直接安裝或下載拖入
pod 'MLeaksFinder'
第二步: 給你的基類或任何一個類添加上這樣一部分內(nèi)容
- (BOOL)willDealloc
{
__weak id weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3*NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[weakSelf assertNotDealloc];
});
return YES;
}
- (void)assertNotDealloc
{
NSAssert(NO, @“”);
}
第三步: 跑起來試試吧! 如果哪個類側(cè)漏了,那么將會進入斷言直接停止運行.
中斷言時责球,我們通過控制臺如下提示可以看出 SearchResultBaseVC 這個類沒有釋放深碱。
debug.png
那么如果我們找到了那個類,那么應(yīng)該怎么確定問題呢?
- (BOOL)willDealloc
{
if(![super willDealloc]) {
return NO;
}
// 可以這樣 我們來看看是哪個對象沒有被釋放
MLCheck(object);
return YES;
}
從 MLeaksFinder 的使用方法可以看出敬辣,MLeaksFinder 具備以下優(yōu)點:
1.使用簡單浅役,不侵入業(yè)務(wù)邏輯代碼,不用打開 Instrument
2.不需要額外的操作,你只需開發(fā)你的業(yè)務(wù)邏輯,在你運行調(diào)試時就能幫你檢測
3.內(nèi)存泄露發(fā)現(xiàn)及時,更改完代碼后一運行即能發(fā)現(xiàn)(這點很重要余寥,你馬上就能意識到哪里寫錯了)
4.精準,能準確地告訴你哪個對象沒被釋放
當然,它也有一些缺點,比如一些不能被釋放的(單例,一級界面,某些系統(tǒng)的私有 View,手勢返回機制問題等),我們需要添加白名單.
就這么簡單了.
這里非常感謝 WeRead團隊博客 提供的內(nèi)容,如您欲詳細了解請移步 中文介紹