iOS App内存与设备内存

时间:2012-03-21 16:14:46

标签: ios memory-management uiimageview uiimage

我的iOS应用程序存在问题,其中应用程序使用的内存(如仪器上的分配所示)与设备本身使用的内存完全不同步。我看到内存警告和崩溃似乎无法避免。

该应用程序结构非常简单。三个UIViewControllers和一个UINavigationController。用户从具有几个按钮的第一个VC开始,导航到第二个VC,该VC具有附加到按钮的大约20个缩略图图像。在点击按钮时,用户转到第三个VC,其中包含一些高分辨率图像,通常为900 x 600像素的PNG。

如果我在iPod Touch或iPhone 4S上运行应用程序,则仪器/分配中的故事几乎相同。它开始时只有不到1MB,在看了大约20个高分辨率图像后,内存大约达到1.5MB,但我开始收到内存警告,应用程序很快就崩溃了。

我已经检查了泄漏工具,但是偶尔会有几个KB泄漏。

然而,如果我看一下仪器中的活动监视器,它就是一个完全不同的故事。我可以看到,当应用程序启动时,系统会为其分配大约15MB,但随着我看到越来越多的图像,使用量继续增加,直到它使用设备可用的所有内容,此时我收到内存警告和应用程序与Springboard一样崩溃,设备返回“滑动打开”屏幕。

显然,我的怀疑是图像被保留了。

我正在使用以下内容创建图片:

 layer1 = [[UIImageView alloc] initWithFrame:myCGRect];

    UIImage *img1 = [[UIImage alloc]initWithContentsOfFile:imgName];

    layer1.image = img1;
    layer1.opaque = YES;
    [self.view addSubview:layer1];
    [img1 release];
    img1 = nil;

layer1是一个UIImageView,它是VC的一个属性。我在dealloc中发布它。

但看起来我这样做是错误的,因为当我从VC3返回VC2时,VC3仍然存在。

所以有两个问题。

  1. 如何管理图像的保留/释放?
  2. 我应该在哪里发布VC3,以及如何确定其他内容不会保留它,例如NSTimer或其他什么。

1 个答案:

答案 0 :(得分:0)

这里的问题是我没有发布第三个视图控制器,因此每次我导航回它时,它都会创建一个新实例,以及所有保留的图像。

解决方案是更精确地确保我发布了我分配的任何东西。当我这样做时,我能够多次导航回第三个VC而不会增加大量内存。