1

我真的在为我的应用程序内存不足而苦苦挣扎。这些是我正在执行的基本操作,如下所述。请注意,每当用户用相机拍照时,我都会保存两个不同的版本——一个是预览(用于快速加载),另一个是高质量的,用于稍后缩放和标记。

这是我的操作顺序列表:

  1. 在应用启动时,显示在应用中拍摄的图像的缩略图(显然,在应用首次启动时,此列表为空)。
  2. 轻触相机按钮以启动UIImagePickerController
  3. 用户拍照并保存(同样,保存预览并保存全尺寸照片)
  4. 缩略图列表刷新并显示新的预览图像。同样,VM Tracker 工具中“Image IO”的整体大小仍然非常小(最多增加了 0.5MB)。
  5. 用户触摸其中一个预览图像,它会启动一个不同的视图控制器,该控制器执行以下操作:
    • 创建新的 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。

4

2 回答 2

6

我正在使用图像编辑器应用程序,这对减少内存使用有很大帮助。试试这个

不要使用 [UIImage imageNamed:] 加载图像以在 ImageView 中加载图像,当图像数量更多时会导致内存问题,

用这个,

 NSString * imgpath= [ [ NSBundle mainBundle] pathForResource:@"imageName" ofType:@"png"];

 ImageView.image=[UIImage imageWithContentsOfFile: imgpath];
于 2014-04-17T06:53:57.467 回答
3

正如@Matic Oblak 所建议的那样......

(1) 我已经看到类似的图像视图问题,在弹出控制器之前尝试将其图像设置为“nil”,看看问题是否仍然存在。

结果:我明确地将 UIImage 和 UIImageView 设置为 nil(不确定是否都需要),果然,它释放了内存。

于 2013-08-02T18:10:32.450 回答