【问题标题】:UIImageView not releasing memory (according to VM Tracker) - Low Memory Warnings & TerminateUIImageView 不释放内存(根据 VM Tracker) - 内存不足警告和终止
【发布时间】:2013-07-16 01:38:48
【问题描述】:

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

这是我的操作顺序列表:

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

【问题讨论】:

  • (1) 我已经看到类似的图像视图问题,在弹出控制器之前尝试将其图像设置为“nil”,看看问题是否仍然存在。 (2) 取决于图像的大小,但未压缩的图像可能会占用大量空间(4000x2000)将占用 32MB。如果这是你应该看一下“平铺”的问题(我认为它甚至在 WWDC 中有描述)
  • @MaticOblak,很好的建议。对于 (1),我尝试将包含图像视图的视图设置为 nil,但这不起作用,但你有一个好点。我可以尝试为 UIImageView 和 UIImage 创建一个实例变量,并在弹出之前将两者都设置为 nil(当然是 UIImage 优先),看看是否可行。 (2)感谢您提供的信息——我一定会查一下的。 :)
  • @MaticOblak,#1 成功了!我明确地将 UIImage 和 UIImageView 设置为 nil(不确定是否都需要),果然,它释放了内存。 如果您将此作为答案发布,我会将其标记为已接受的解决方案! 谢谢!!

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


【解决方案1】:

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

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

使用这个,

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

 ImageView.image=[UIImage imageWithContentsOfFile: imgpath];

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      相关资源
      最近更新 更多