我有一个iOS应用程序出现问题,应用程序使用的内存(如Instrument上的Allocations中所示)与设备本身使用的内存完全不同步。我看到了我无法避免的内存警告和崩溃。iOS应用程序内存vs设备内存
该应用程序结构非常简单。三个UIViewControllers和一个UINavigationController。用户从具有几个按钮的第一个VC开始,导航到第二个VC,该VC具有大约20个附加到按钮的缩略图图像。在点击一个按钮时,用户进入第三个具有几个高分辨率图像的VC,通常是900×600像素的PNG。
如果我在我的iPod Touch或iPhone 4S上运行应用程序,Instrument/Allocations中的故事几乎相同。它开始于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仍然存在。
所以有两个问题。
- 我应该怎么做才能管理图像的保留/释放?
- 我应该在哪里发布VC3,以及如何确保别的东西不会保留它,例如NSTimer或其他东西。