我真的很难在我的应用程序中耗尽内存。这是我正在执行的基本操作,如下所述。请注意,每当用户使用相机拍摄照片时,我会保存两个不同版本的照片 - 一个是预览(用于快速加载),另一个是高质量的用于缩放和稍后标记。
以下是我的操作顺序列表:
UIImagePickerController
这不是什么大不了的事,但当我回去(导航控制器弹出)时,“Image IO”类型和“Dirty”类型的大小都没有减小。就像UIImageView没有被破坏一样。每次我推动这个视图控制器并加载图像时,大小增加30MB,弹出不会减少它。
我正在使用ARC,所以我不会自己调用release,但是当我弹出视图控制器时,我希望它会被破坏。
仅供参考,我用于保存预览和完整图像的设置是:
预览:[UIImageJPEGRepresentation([UIImage imageWithImage:image scaledToSize:CGSizeMake(300, 400)], 0.4f) writeToFile:previewPath atomically:NO];
完整:[UIImageJPEGRepresentation(image , 0.8f) writeToFile:imagePath atomically:NO];
我主要担心的是(1)在弹出包含视图控制器之后弄清楚如何摆脱UIImage使用的内存,但我也想知道(2)为什么加载时图像为30MB。
答案 0 :(得分:5)
我正在使用图像编辑器应用程序,这对减少内存使用有很大帮助。试试这个
不要使用[UIImage imageNamed:]为ImageView中的加载图像加载图像,当没有图像时,会导致内存问题,
使用此,
NSString * imgpath= [ [ NSBundle mainBundle] pathForResource:@"imageName" ofType:@"png"];
ImageView.image=[UIImage imageWithContentsOfFile: imgpath];
答案 1 :(得分:3)
正如@Matic Oblak所建议的那样......
(1)我已经看到了与图像视图类似的问题,尝试在弹出控制器之前将其图像设置为“nil”,并查看问题是否仍然存在。
结果:我明确地将UIImage和UIImageView设置为nil(不确定两者是否都需要),果然,它释放了内存。