解決TableViewCell使用SDWebImage加載大量圖片內存崩潰的問題

? ?身為小白的我這個問題困擾我很久.工程寫出來以后,模擬器根本不會發現問題所在(貌似電腦內存足夠大).當你在真機測試使用的時候你就會發現Cell快速滑動,數據量大(圖片數量)的時候app就會被系統Crash. 廢話就不多說了,直接說本人解決過程吧.!!!

方向1: ? 從圖片入手

方向2:? 工程UITableView優化

方向3:? SDWebImage優化

方向1:? 從圖片入手

很多人都會忽略這個問題? 都會往自己的代碼工程這個方向去考慮 問題. 其實圖片影響非常大. 如果圖片質量2M,3M圖片你直接放到cell上展示.不用想了 肯定是會卡成狗.? 渲染這樣的圖片肯定需要很大內存.? 所以往往你在開發的時候<<要跟后臺商量.獲取圖片劃分兩個地址.一個地址獲取縮略圖,一個地址獲取原圖>> 這樣你就可以在TableViewCell使用縮略圖(展示用),點擊圖片查看(使用原圖). 這樣就大大減少了內存的使用.

方向2:? 工程UITableView優化

這個普遍大家都會去關注使用的起來差不多!! ? ??

1 高度緩存, cell 重用.. (不用說)

2 緩存Cell UI數據 比如高度 減少計算 (Model去緩存,或者使用工具SDAutoLayout)

3 Cell減少重復創建View (懶加載? 一般cell局部規格都不一樣都是根據數據來適配view<比如朋友圈> 所以你可以先創建好view放進數組 根據圖片數組的長度獲取view的個數去展示view ) 下面是我用SDAutoLayout代碼

方向3:? SDWebImage優化

SDWebImage 使用

到這里一般的數據足夠使用 但是圖片數量大的依舊內存會出現問題 ?接下就參考網上的一篇博客 完美解決問題

博客地址: ? http://blog.csdn.net/benyoulai5/article/details/50462586

SDWebImage 優化

1 找到這個位置?

復制 ? ?復制到上面文件中去實現第一步方法

+(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;

// 創建一個bitmap的context

// 并把它設置成為當前正在使用的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)];

}

// 從當前context中創建一個改變大小后的圖片

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

// 使當前的context出堆棧

UIGraphicsEndImageContext();

return newImage;

}


第二步?

這樣基本解決內存問題 具體解釋可以參考上面博客!!!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容