我真的在为我的应用程序内存不足而苦苦挣扎。这些是我正在执行的基本操作,如下所述。请注意,每当用户用相机拍照时,我都会保存两个不同的版本——一个是预览(用于快速加载),另一个是高质量的,用于稍后缩放和标记。
这是我的操作顺序列表:
- 在应用启动时,显示在应用中拍摄的图像的缩略图(显然,在应用首次启动时,此列表为空)。
- 轻触相机按钮以启动
UIImagePickerController
- 用户拍照并保存(同样,保存预览并保存全尺寸照片)
- 缩略图列表刷新并显示新的预览图像。同样,VM Tracker 工具中“Image IO”的整体大小仍然非常小(最多增加了 0.5MB)。
- 用户触摸其中一个预览图像,它会启动一个不同的视图控制器,该控制器执行以下操作:
- 创建新的 UIImageView,加载图像,作为子视图添加到 View Controllers 视图
- 突然,“Image IO”跃升了 30MB。
这没什么大不了的,但是当我返回时(导航控制器弹出),“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。