SDWebImage加載多張高分辨圖片crash

項(xiàng)目中有一個(gè)控制器里的圖片服務(wù)器那邊沒有進(jìn)行壓縮 所以使用SDWebImage顯示在collectionView/tableView的時(shí)候有時(shí)會(huì)crash(及時(shí)沒有反復(fù)進(jìn)幾次就會(huì)crash了)萤捆。網(wǎng)上查了很多資料萍摊,大致總結(jié)有一下幾種方法:

1梢夯、每次加載高清圖片時(shí)清空memcache

[[SDImageCache sharedImageCache] setValue:nil forKey:@"memCache"];

但是這種方法會(huì)產(chǎn)生一個(gè)效果:當(dāng)滑動(dòng)tableView的時(shí)候 cell消失在屏幕中再滑回來圖片會(huì)從新加載阿蝶。

2.取消解壓縮

[SDImageCache sharedImageCache].shouldDecompressImages = NO;
[SDWebImageDownloader sharedDownloader].shouldDecompressImages = NO;

之所以產(chǎn)生crash的原因柬甥,是因?yàn)樵赟DWebImage里的這個(gè)方法decodedImageWithImage在加載高清圖片是占用了大量?jī)?nèi)存饮六。所以上面的兩行代碼就禁止調(diào)用了這個(gè)方法,那么問題來了苛蒲,那這個(gè)方法存在的意義又是什么呢卤橄?

因?yàn)槲覀儗?duì)圖片的展示大部分是在tableviews/collectionview里 其實(shí)decodedImageWithImage方法是對(duì)圖片進(jìn)行解壓縮并且緩存起來,以提高流暢度臂外。但是加載高分辨率的圖片就會(huì)起到適得其反的效果窟扑。所以在加載高分辨率圖片的地方調(diào)用以上兩個(gè)方法,其他地方仍然保持為YES就可以了漏健。如果再限制圖片內(nèi)存緩存最高限制就更安全了

截圖

3.對(duì)圖片進(jìn)行等比例壓縮(需修改源碼)

Snip20161019_8.png

這里面對(duì)圖片的處理是直接按照原大小進(jìn)行的辜膝,如果分辨率很大這里導(dǎo)致占用了大量?jī)?nèi)存。所以我們需要在這里對(duì)圖片做一次等比的壓縮漾肮。
在UIImage+MultiFormat這個(gè)類里面添加如下壓縮方法

+(UIImage *)compressImageWith:(UIImage *)image{
float imageWidth = image.size.width;
float imageHeight = image.size.height;
float width = 640;
float height = image.size.height/(image.size.width/width);
float widthScale = imageWidth /width;
float heightScale = imageHeight /height;
// 創(chuàng)建一個(gè)bitmap的context
// 并把它設(shè)置成為當(dāng)前正在使用的context
UIGraphicsBeginImageContext(CGSizeMake(width, height));
if (widthScale > heightScale) {
[image drawInRect:CGRectMake(0, 0, imageWidth /heightScale , height)];
}
else {
image drawInRect:CGRectMake(0, 0, width , imageHeight /widthScale)];
}
// 從當(dāng)前context中創(chuàng)建一個(gè)改變大小后的圖片
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
// 使當(dāng)前的context出堆棧
UIGraphicsEndImageContext();
return newImage;
}

在上圖箭頭位置這樣調(diào)用

image = [[UIImage alloc] initWithData:data];
if (data.length/1024 > 128) {
image = [self compressImageWith:image];
}

到了這里還需要進(jìn)行最后一步。就是在SDWebImageDownloaderOperation的connectionDidFinishLoading方法里面的:

UIImage *image = [UIImage sd_imageWithData:self.imageData];
//將等比壓縮過的image在賦在轉(zhuǎn)成data賦給self.imageData
NSData *data = UIImageJPEGRepresentation(image, 1);
self.imageData = [NSMutableData dataWithData:data];

但是我在嘗試這個(gè)方法的時(shí)候只這樣操作的話還是會(huì)crash茎毁,所以還是要配合下面這個(gè)方法使用克懊,所以那個(gè)郁悶俺栏ā!L犯取G蕉!大家也可以嘗試一下

[[SDImageCache sharedImageCache] setValue:nil forKey:@"memCache"];
最終我是選擇了第二種扮念。歡迎補(bǔ)充损搬!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市柜与,隨后出現(xiàn)的幾起案子巧勤,更是在濱河造成了極大的恐慌,老刑警劉巖弄匕,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颅悉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡迁匠,警方通過查閱死者的電腦和手機(jī)剩瓶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來城丧,“玉大人延曙,你說我怎么就攤上這事⊥龊澹” “怎么了枝缔?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)磺平。 經(jīng)常有香客問我魂仍,道長(zhǎng),這世上最難降的妖魔是什么拣挪? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任擦酌,我火速辦了婚禮,結(jié)果婚禮上菠劝,老公的妹妹穿的比我還像新娘赊舶。我一直安慰自己,他們只是感情好赶诊,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布笼平。 她就那樣靜靜地躺著,像睡著了一般舔痪。 火紅的嫁衣襯著肌膚如雪寓调。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天锄码,我揣著相機(jī)與錄音夺英,去河邊找鬼晌涕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛痛悯,可吹牛的內(nèi)容都是我干的余黎。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼载萌,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼惧财!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起扭仁,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤垮衷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后斋枢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帘靡,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年瓤帚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了描姚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡戈次,死狀恐怖轩勘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情怯邪,我是刑警寧澤绊寻,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站悬秉,受9級(jí)特大地震影響澄步,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜和泌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一村缸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧武氓,春花似錦梯皿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至忠烛,卻和暖如春属提,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背美尸。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工垒拢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留旬迹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓求类,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親屹耐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子尸疆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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