iOS - 內(nèi)存管理之圖片緩存相關(guān)

[instrument](http://blog.csdn.net/totogo2010/article/details/8233565

第一.本地圖片緩存問(wèn)題

    _1.發(fā)現(xiàn)問(wèn)題_
    
        寫了一個(gè)demo,由于不與后臺(tái)交互,所以一些圖片資源和背景都放到了工程中,加載刷新的卡片等也是從工程中直接導(dǎo)入而非后臺(tái)請(qǐng)求,導(dǎo)致項(xiàng)目在運(yùn)行中出現(xiàn)了內(nèi)存暴漲問(wèn)題,如果 有86%的內(nèi)存都是 imageIO_Malloc 導(dǎo)致的! 嘗試清空所有背景圖片 內(nèi)存有80多M直接降為20多M 且穩(wěn)定在怎么 push 和 pop都不會(huì)增加內(nèi)存;
Paste_Image.png
Paste_Image.png
    _2.解決方法_

        _棄用方法中的  _
            ima.image = [UIImage imageNamed:@"battle_navigation_bar"]; 
       _ 改用_ 
            NSString *imageFile = [NSString stringWithFormat:@"%@/%@",[[NSBundle mainBundle] resourcePath],@"battle navigation bar"];
            ima.image = [[UIImage alloc] initWithContentsOfFile:imageFile];
        _最后在 viewWillDisappear 或者 viewDidDisappear方法里面清空當(dāng)前加載圖片的視圖或者父視圖_
            self.view = nil;

      _  你會(huì)發(fā)現(xiàn)不論是 push 還是 pop 控制器,包括彈出視圖,相關(guān)的本地圖片緩存得到解決,內(nèi)存不在增加!_

   _ 3.內(nèi)存泄漏查看 (Xcode 自帶工具)_

        打開(kāi)項(xiàng)目,點(diǎn)擊 product , 選擇 Analyze , 項(xiàng)目會(huì)自動(dòng)運(yùn)行,運(yùn)行完畢后,如果出現(xiàn)下圖情況,說(shuō)明內(nèi)存泄漏,藍(lán)色的代表就是泄漏地方,需要更改!
Paste_Image.png
        如果是下圖情況,沒(méi)有藍(lán)色的東西,則代表不需要更改!
Paste_Image.png
   _ 4.內(nèi)存占用查看 (Xcode 自帶工具 : instruments)_

        _打開(kāi)項(xiàng)目,點(diǎn)擊 product , 選擇 Profile , 連接真機(jī),出現(xiàn)如圖情況_
Paste_Image.png
Paste_Image.png
Paste_Image.png
        _選擇 Call Trees , 點(diǎn)擊左上方紅色按鈕運(yùn)行_
Paste_Image.png

第二.內(nèi)存警告方法相關(guān)

    1:只要出現(xiàn)內(nèi)存警告的時(shí)候娱挨,會(huì)第一時(shí)間執(zhí)行 appdelegate的DidReceiveMemoryWarning方法豹芯,所以我們先要在這里對(duì)正在下載的圖片進(jìn)行處理

            - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application{
                NSLog(@"內(nèi)存警告了??????????????");
                SDWebImageManager *mgr = [SDWebImageManager sharedManager];
                // 1.取消正在下載的操作
                [mgr cancelAll];
                // 2.清除內(nèi)存緩存
                [mgr.imageCache clearMemory];
            }

    2:遇到內(nèi)存警告后,在每一個(gè)VC中 都有didReceiveMemoryWarning方法堰乔,來(lái)接受內(nèi)存警告的通知,所以我們也需要在這里進(jìn)行處理谜叹,將沒(méi)有顯示的VC的self.view置空 釋放內(nèi)存

            - (void)didReceiveMemoryWarning {
                NSLog(@"內(nèi)存警告my");
                [super didReceiveMemoryWarning];//即使沒(méi)有顯示在window上昆稿,也不會(huì)自動(dòng)的將self.view釋放侠碧。注意跟ios6.0之前的區(qū)分
                // 此處做兼容處理需要加上ios6.0的宏開(kāi)關(guān),保證是在6.0下使用的,6.0以前屏蔽以下代碼廉丽,否則會(huì)在下面使用self.view時(shí)自動(dòng)加載viewDidUnLoad
                if ([[UIDevice currentDevice].systemVersion floatValue] >= 6.0) {
                    //需要注意的是self.isViewLoaded是必不可少的倦微,其他方式訪問(wèn)視圖會(huì)導(dǎo)致它加載,在WWDC視頻也忽視這一點(diǎn)正压。
                    if (self.isViewLoaded && !self.view.window)// 是否是正在使用的視圖
                    {
                        self.view = nil;// 目的是再次進(jìn)入時(shí)能夠重新加載調(diào)用viewDidLoad函數(shù)欣福。
                    }
                }

        3:上面兩步其實(shí)已經(jīng)能解決大部分內(nèi)存警告的問(wèn)題了,最后還有點(diǎn)小優(yōu)化焦履。就是使用自帶的圖片時(shí)拓劝,最好使用

            [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:A ofType:nil]];

        而不是

            [UIImage imageNamed:[UIUtil imageName:@"1.png"]];

        因?yàn)榍罢咧苯幼x取圖片,不加入緩存嘉裤,后者是需要加入緩存的郑临,會(huì)增加內(nèi)存負(fù)擔(dān)

所以前者性能優(yōu)于后者

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市价脾,隨后出現(xiàn)的幾起案子牧抵,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件犀变,死亡現(xiàn)場(chǎng)離奇詭異妹孙,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)获枝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門蠢正,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人省店,你說(shuō)我怎么就攤上這事嚣崭。” “怎么了懦傍?”我有些...
    開(kāi)封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵雹舀,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我粗俱,道長(zhǎng)说榆,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任寸认,我火速辦了婚禮签财,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘偏塞。我一直安慰自己唱蒸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布灸叼。 她就那樣靜靜地躺著神汹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪怜姿。 梳的紋絲不亂的頭發(fā)上慎冤,一...
    開(kāi)封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音沧卢,去河邊找鬼蚁堤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛但狭,可吹牛的內(nèi)容都是我干的披诗。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼立磁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼呈队!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起唱歧,我...
    開(kāi)封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宪摧,失蹤者是張志新(化名)和其女友劉穎粒竖,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體几于,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蕊苗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沿彭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朽砰。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖喉刘,靈堂內(nèi)的尸體忽然破棺而出瞧柔,到底是詐尸還是另有隱情,我是刑警寧澤睦裳,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布造锅,位于F島的核電站,受9級(jí)特大地震影響推沸,放射性物質(zhì)發(fā)生泄漏备绽。R本人自食惡果不足惜券坞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一鬓催、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧恨锚,春花似錦宇驾、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至他挎,卻和暖如春筝尾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背办桨。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工筹淫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人呢撞。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓损姜,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親殊霞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子摧阅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,777評(píng)論 25 707
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司绷蹲,掛了不少棒卷,但最終還是拿到小米顾孽、百度、阿里比规、京東岩齿、新浪、CVTE苞俘、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,213評(píng)論 11 349
  • 快到三月底吃谣,像是過(guò)了一年的四分之一了乞封。 三月,感覺(jué)像是趕集一樣的匆忙岗憋,許多人的來(lái)來(lái)去去肃晚,或是離開(kāi),或是到來(lái)仔戈。和每一...
    莊BiBi閱讀 169評(píng)論 3 0