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

the*_*atp 1 out-of-memory uiimageview ios xcode-instruments

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

这是我的操作顺序列表:

  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.

hmd*_*eep 5

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

不要使用[UIImage imageNamed:]为ImageView中的加载图像加载图像,当没有图像更多时会导致内存问题,

用这个,

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

 ImageView.image=[UIImage imageWithContentsOfFile: imgpath];
Run Code Online (Sandbox Code Playgroud)