SDWebImage
加载Gif图片过大,导致内存飙升最终程序崩溃,报错:
Message from debugger: Terminated due to memory issue
我发现这里
UIImage*image = [UIImagesd_imageWithData:data];
图片取出来的时候就已经巨大无比,占用了很大的内存,导致内存来不及释放就崩溃。
发现这里面对图片的处理是直接按照原大小进行的,如果几千是分辨率这里导致占用了大量内存。
所以我们需要在这里对图片做一次等比的压缩。
更改源码:

1、在UIImage+MultiFormat 中增加方法,对图片做一次等比的压缩。
+(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;
}
2、再在上面红框位置对图片进行压缩
if(data.length/1024>128) {
image = [UIImage compressImageWith:image];
}
另附:
SDWebImage 加载显示 GIF 与性能问题:http://www.cnblogs.com/silence-cnblogs/p/6682867.html
SDWebImage加载高清大图崩溃问题:https://www.cnblogs.com/oc-bowen/p/9040476.html
使用SDWebImage加载大尺寸GIF图片时,可能导致因内存问题而崩溃。问题在于`UIImage`从数据中创建时占用过大内存。解决办法是在`UIImage+MultiFormat`中增加图片等比压缩的方法,并在加载时应用该压缩,以避免内存飙升。参考链接提供了更多关于SDWebImage加载GIF和性能问题的解决方案。

2618

被折叠的 条评论
为什么被折叠?



