iOS应用程序内存与设备内存

iOS应用程序内存与设备内存,ios,memory-management,uiimageview,uiimage,Ios,Memory Management,Uiimageview,Uiimage,我有一个iOS应用程序的问题,如仪器上的分配所示,应用程序使用的内存与设备本身使用的内存完全不同步。我看到记忆警告和崩溃,我似乎无法避免 这个应用程序的结构非常简单。三个UIViewController和一个UINavigationController。用户从第一个VC开始,它有几个按钮,然后导航到第二个VC,第二个VC有大约20个附在按钮上的缩略图。点击一个按钮,用户进入第三个VC,它有一些高分辨率图像,通常是900 x 600像素PNG 如果我在iPodtouch或iPhone4S上运行该应

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

这个应用程序的结构非常简单。三个UIViewController和一个UINavigationController。用户从第一个VC开始,它有几个按钮,然后导航到第二个VC,第二个VC有大约20个附在按钮上的缩略图。点击一个按钮,用户进入第三个VC,它有一些高分辨率图像,通常是900 x 600像素PNG

如果我在iPodtouch或iPhone4S上运行该应用程序,那么仪器/分配中的情况几乎是一样的。它的启动速度略低于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或其他东西。
这里的问题是我没有发布第三个视图控制器,因此每次我导航回它时,它都会创建一个新实例,以及所有保留的图像

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