今天上扛推位的是:"MLeaksFinder"這個庫

首先交代一下背景:

在 ARC 時(shí)代較常見的內(nèi)存泄露是循環(huán)引用導(dǎo)致的,開發(fā)中也較容易被忽略.而蘋果的 Instrument 操作起來既不簡單又不粗暴,而且有些工具還查不出來這類問題.

那么這篇文章適合你嗎?

  1. 你需要一個簡單粗暴的檢測工具嗎?
  2. 你是否對當(dāng)前項(xiàng)目內(nèi)存問題做過整體的跟蹤監(jiān)測?
  3. 你想要一個即時(shí),精準(zhǔn),讓你無拖延的解決問題的輔助工具嗎?

如果你都不需要,其實(shí)你也可以了解一下,因?yàn)樗⒉荒艿⒄`你幾分鐘時(shí)間,下面我們來看看如何

使用及效果:

第一步: 通過 pod 直接安裝或下載拖入

pod 'MLeaksFinder'

https://github.com/Zepo/MLeaksFinder.git

第二步: 給你的基類或任何一個類添加上這樣一部分內(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è)漏了,那么將會進(jìn)入斷言直接停止運(yùn)行.

中斷言時(shí),我們通過控制臺如下提示可以看出 SearchResultBaseVC 這個類沒有釋放。

debug.png

那么如果我們找到了那個類,那么應(yīng)該怎么確定問題呢?

- (BOOL)willDealloc 
{
    if(![super willDealloc]) {
        return NO;
    }
    // 可以這樣 我們來看看是哪個對象沒有被釋放
    MLCheck(object);
    return YES;
}

從 MLeaksFinder 的使用方法可以看出,MLeaksFinder 具備以下優(yōu)點(diǎn):

1.使用簡單,不侵入業(yè)務(wù)邏輯代碼,不用打開 Instrument
2.不需要額外的操作,你只需開發(fā)你的業(yè)務(wù)邏輯,在你運(yùn)行調(diào)試時(shí)就能幫你檢測
3.內(nèi)存泄露發(fā)現(xiàn)及時(shí),更改完代碼后一運(yùn)行即能發(fā)現(xiàn)(這點(diǎn)很重要,你馬上就能意識到哪里寫錯了)
4.精準(zhǔn),能準(zhǔn)確地告訴你哪個對象沒被釋放

當(dāng)然,它也有一些缺點(diǎn),比如一些不能被釋放的(單例,一級界面,某些系統(tǒng)的私有 View,手勢返回機(jī)制問題等),我們需要添加白名單.

就這么簡單了.

這里非常感謝 WeRead團(tuán)隊(duì)博客 提供的內(nèi)容,如您欲詳細(xì)了解請移步 中文介紹

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

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

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