iOS加载超清大图,大尺寸,高分辨率的图片内存暴涨且不释放的问题
2021-08-12 本文已影响0人
taisheng2017
主要目的是为了记录
问题描述:使用 UIImage *image = [UIImage imageNamed:@"阿拉伯风格曲.png"]; [_staffImageView setImage:image]; 造成内存暴增,且退出当前界面,也调用了 dealloc 方法,但就是内存不释放。图片 "阿拉伯风格曲.png " 大小只有668Kb,但是尺寸 是1160X11900.
内存暴增问题的解决:
重新绘制图片,代码如下,就解决了内存暴增的问题。
+ (UIImage *)scaleGraphicsImage:(UIImage *)image{
UIImage *newImage;
if (image.size.width > 1024) { //分辨率大的则重绘,否则不重绘
//获取原图片宽高比
CGFloat sourceImageAspectRatio = image.size.width/image.size.height;
CGSize newSize = CGSizeMake(1024, 1024/sourceImageAspectRatio);
//重绘图片
UIGraphicsBeginImageContext(newSize);
[image drawInRect:CGRectMake(0, 0, newSize.width,newSize.height)];
newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
} else {
newImage = image;
}
return newImage;
}
内存不释放问题的解决:
使用 UIImage *image = [UIImage imageNamed:@"阿拉伯风格曲.png"]; imageNamed 方法加载图片 图片内存是一直 在内存中的。
所以要更换加载图片的方式:如下
UIImage *image = [[UIImage alloc] initWithContentsOfFile:thePath];