2013-07-16 38 views
1

我真的很苦恼,我的应用程序内存不足。这是我正在执行的基本操作,如下所述。请注意,无论何时用户使用相机拍摄照片,我都会保存它的两个不同版本 - 一个是预览(用于快速加载),另一个用于高质量的缩放和稍后标记。UIImageView不释放内存(根据VM跟踪器) - 低内存警告和终止

这里是我的操作顺序表:

  1. 在应用程序启动,已采取在应用图像显示缩略图(显然,在首批推出的应用程序,此列表为空) 。
  2. 触摸相机按钮启动UIImagePickerController
  3. 用户拍摄照片并保存(再次,预览保存和全尺寸的照片被保存)
  4. 缩略图刷新列表,显示新的预览图像。同样,VM Tracker工具中“Image IO”的整体大小仍然非常小(可能增加0.5MB)。
  5. 用户触摸预览图像中的一个,这将启动,做以下的一个不同的视图控制器:
    • 创建新的UIImageView,加载图像,添加为子视图的视图控制器查看
    • 突然,“图像IO “跳过30MB。

将不会是一个大问题,但是当我回去(导航控制器POP),无论是“图像Io”型还是“脏”型的尺寸减小。就好像UIImageView没有被销毁一样。每次我推这个视图控制器并加载一个图像,大小增加30MB,并且弹出不会减少它。

我正在使用ARC,所以我不会调用释放自己,但我希望它会在我弹出视图控制器时被销毁。

仅供参考,我使用保存的预览和全图像的设置是:

前瞻:[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

(1)我已经看到了类似的问题,图像视图,尝试弹出控制器之前,设置它的形象,以“无”,看看问题是否仍然存在。 (2)取决于图像的大小,但未压缩的图像可能需要很大的空间(4000x2000)需要32MB。如果这是个问题,你应该关注一下“平铺”(我认为它甚至在WWDC中有描述) –

+0

@MaticOblak,很好的建议。对于(1),我尝试将包含图像视图的视图设置为零,但这不起作用,但您有一个好点。我可以尝试为UIImageView和UIImage创建一个实例变量,并在弹出之前将它们都设置为nil(当然是UIImage),然后看看它是否有效。对于(2)感谢信息 - 我一定会看看。 :) – thephatp

+0

@MaticOblak,#1工作!我明确地将UIImage和UIImageView设置为零(不确定是否需要这两者),并且确实已经释放了内存。 **如果您将此作为答案发布,我会将其标记为公认的解决方案!**谢谢! – thephatp

回答

3

至于建议的@Matic Oblak ...

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

结果:我明确地将UIImage和UIImageView设置为零(不知道是否需要这两者),并且确实已经释放了内存。

5

我在图像编辑应用程序工作,这帮助我很多关于减少内存use.Try这

不加载与[UIImage的imageNamed:]图片在ImageView的负荷的形象,这是导致内存问题,当没有。图像越多,

利用这一点,

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

ImageView.image=[UIImage imageWithContentsOfFile: imgpath]; 
+0

它真的有效... –