SDWebImage 加载gif动图崩溃:Message from debugger: Terminated due to memory issue

SDWebImage

加载Gif图片过大,导致内存飙升最终程序崩溃,报错:

Message from debugger: Terminated due to memory issue

 

我发现这里

UIImage*image = [UIImagesd_imageWithData:data];

图片取出来的时候就已经巨大无比,占用了很大的内存,导致内存来不及释放就崩溃。

发现这里面对图片的处理是直接按照原大小进行的,如果几千是分辨率这里导致占用了大量内存。

所以我们需要在这里对图片做一次等比的压缩。

更改源码:

SDWebImage 加载gif动图崩溃:Message from debugger: Terminated due to memory issue_第1张图片

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

你可能感兴趣的:(iOS)