UIImageView不释放内存(根据VM Tracker) - 低内存警告&终止

时间:2013-07-16 01:38:48

标签: ios uiimageview out-of-memory xcode-instruments

我真的很难在我的应用程序中耗尽内存。这是我正在执行的基本操作,如下所述。请注意,每当用户使用相机拍摄照片时,我会保存两个不同版本的照片 - 一个是预览(用于快速加载),另一个是高质量的用于缩放和稍后标记。

以下是我的操作顺序列表:

  1. 在应用启动时,显示已在应用中拍摄的图像的缩略图(显然,在首次启动应用时,此列表为空)。
  2. 触摸相机按钮以启动UIImagePickerController
  3. 用户拍摄照片并保存(再次保存预览并保存完整比例照片)
  4. 缩略图列表会刷新并显示新的预览图像。同样,VM Tracker仪器中“Image IO”的整体尺寸仍然非常小(可能增加0.5MB顶部)。
  5. 用户触摸其中一个预览图像,启动不同的视图控制器,执行以下操作:
    • 创建新的UIImageView,加载图像,作为子视图添加到View Controllers视图
    • 突然,“Image IO”跳了30MB。
  6. 这不是什么大不了的事,但当我回去(导航控制器弹出)时,“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。

2 个答案:

答案 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(不确定两者是否都需要),果然,它释放了内存。