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

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

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

    _1.發(fā)現(xiàn)問(wèn)題_
    
        寫(xiě)了一個(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)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評(píng)論 6 543
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,559評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,442評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,835評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,581評(píng)論 6 412
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,922評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評(píng)論 3 447
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 43,096評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,639評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,374評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,591評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評(píng)論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,789評(píng)論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,196評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,524評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,322評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,554評(píng)論 2 379

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,740評(píng)論 25 708
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,339評(píng)論 11 349
  • 快到三月底,像是過(guò)了一年的四分之一了。 三月,感覺(jué)像是趕集一樣的匆忙,許多人的來(lái)來(lái)去去,或是離開(kāi),或是到來(lái)。和每一...
    莊BiBi閱讀 183評(píng)論 3 0