0

我正在使用 MapView 和 UIImagePicker 创建一个应用程序。当用户继续前进时,我正在屏幕上显示地图及其显示路线。用户可以在两者之间捕获图像。我有两个屏幕。

  1. 显示地图
  2. 捕获图像(这是从屏幕 1 推送的)

当我从屏幕 1 转到屏幕 2 时。我显示一个 ImagePicker 并允许用户捕获图像。当我弹回屏幕 1 时,我release将所有对象都制作出来nil。这个任务通常完成,viewDidUnload但我遇到了内存问题,所以当我的视图控制器弹出时我就做了。因此,一旦我完成所有对象,它们就会被释放并为零。

当我从地图进入我的登录屏幕时,我正在做我所知道的每一件事:

  1. 从超级视图中删除视图
  2. 释放所有关联对象或保留对象(甚至包括 NSString 对象)
  3. nil为所有这些对象设置值。

当我通过分析运行应用程序并且没有可用的运行时泄漏但即使在活动监视器中,我的应用程序的真实内存也在不断增加:(

在捕获了 10-12 张图像后,Received memory warning. Level=1我什至没有将 UIImage 对象存储在内存中。我在文档目录中写这个并且只存储字符串路径。

请帮助我并指导我还能做些什么来解决这个问题。

更新

在后退按钮上释放对象时,我正在使用:

- (void)releaseObjects {

    [mapViewNewTour setDelegate:nil];
    [mapViewNewTour removeFromSuperView];
    [mapViewNewTour release];
    mapViewNewTour = nil;
    [lblNavTitle release];
    lblNavTitle = nil;
    [btnEdit release];
    btnEdit = nil;
    [txtTourName release];
    txtTourName = nil;
    [vwTourName release];
    vwTourName = nil;
    [mutDictOfflineSharing release];
    mutDictOfflineSharing = nil;
    [mutArrImage release];
    mutArrImage = nil;

    [_routeLine release];
    _routeLine = nil;
    [_routeLineView release];
    _routeLineView = nil;
    [aLazyLoader release];
}
4

2 回答 2

3

ARC 也支持 4.3,所以使用它。

您使用专用“releaseEverything”方法的方法一直被破坏 - 它显示缺乏所有权跟踪,充其量是一种黑客行为。

viewDidUnload现在无论如何都已弃用,并且不会被 iOS 6 中的系统调用(您应该针对它构建)。

不要与框架抗争——以“正确”的方式去做。

于 2012-10-26T09:46:03.290 回答
0

我建议您运行仪器并查看使用内存的位置。内存使用分析有特定的工具。您需要的工具是活动监视器和 VM 跟踪器。

另外我建议你仔细检查你没有使用 NSZombieEnabled 运行(在方案中检查它),因为它会导致内存警告。

于 2012-10-26T10:34:01.543 回答