? ? 前幾天,項(xiàng)目的功能基本完成差不多的時(shí)候蓝翰。用allocation檢測(cè)了下內(nèi)存運(yùn)行狀況徐伐,發(fā)現(xiàn)當(dāng)tableView快速滾動(dòng)贯钩,以及頁面不斷跳轉(zhuǎn)時(shí),cg-raster-data在不斷猛增办素,甚至達(dá)到了100M之多角雷,并且當(dāng)我將app退回后臺(tái)時(shí),也僅僅只是稍微釋放了一點(diǎn)性穿。
? ?為什么當(dāng)加載停止后勺三,內(nèi)存沒有下去呢。一開始認(rèn)為需曾,可能因?yàn)閟dwebimage是會(huì)將圖片下載后放進(jìn)內(nèi)存中一直保存至收到內(nèi)存警告吗坚,或者主動(dòng)清除才能釋放掉。于是我在離開加載圖片的頁面時(shí)呆万,做了清除緩存及disk的動(dòng)作商源,但是仍舊沒用。所以問題不是出在這里谋减。[[SDImageCachesharedImageCache]clearMemory];[[SDImageCachesharedImageCache]clearDisk];
? ?然后我嘗試了下將sd的最大下載內(nèi)存占用設(shè)置了小一點(diǎn)炊汹。只要同一時(shí)間內(nèi),加載圖片而多出來的內(nèi)存不超過這個(gè)大小逃顶,是不是就會(huì)降低內(nèi)存消耗呢讨便。于是,我用setMaxMemoryCost 方法設(shè)置了最大內(nèi)存以政。但是發(fā)現(xiàn)了另外個(gè)問題霸褒。因?yàn)閟dwebimage同時(shí)能保存到內(nèi)存的數(shù)量減少了,每次我下拉加載tableview時(shí)盈蛮,會(huì)去從網(wǎng)絡(luò)端不斷的重新加載圖片废菱,導(dǎo)致頁面每次reload時(shí)會(huì)閃屏。肉眼能明顯的感覺的每次的閃動(dòng)抖誉,用戶體驗(yàn)特別差殊轴。
之后,在一通google袒炉。發(fā)現(xiàn)一個(gè)別人的解決辦法旁理,很好用,同時(shí)也確實(shí)解決了我的問題我磁。sdwebimage在加載圖片的時(shí)候孽文,默認(rèn)是shouldDecompressImages=Y(jié)ES.也就是框架作者本意是為了讓圖片加載更塊驻襟,所以會(huì)幫我把圖片解壓至內(nèi)存中,尤其圖片分辨率愈大芋哭,內(nèi)存消耗越大沉衣。需要將其關(guān)閉。
[[SDImageCache sharedImageCache] setShouldDecompressImages:NO];[[SDWebImageDownloader sharedDownloader] setShouldDecompressImages:NO];
關(guān)閉后發(fā)現(xiàn)减牺,其實(shí)加載時(shí)候并沒有特別明顯的感覺加載速度變慢了豌习。并且內(nèi)存消耗幾乎沒有。其實(shí)開發(fā)者也有在文件里寫明拔疚。只是平時(shí)很少有人會(huì)去看斑鸦。
* Decompressing images that are downloaded and cached can improve peformance but can consume lot of memory.
* Defaults to YES. Set this to NO if you are experiencing a crash due to excessive memory consumption.