? ?身為小白的我這個問題困擾我很久.工程寫出來以后,模擬器根本不會發現問題所在(貌似電腦內存足夠大).當你在真機測試使用的時候你就會發現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;
}
第二步?
這樣基本解決內存問題 具體解釋可以參考上面博客!!!