Iphone内存警告问题

时间:2012-10-26 09:34:06

标签: iphone ios memory-management

我正在使用MapView和UIImagePicker创建一个应用程序。我在用户移动时在屏幕上显示地图及其显示路线。用户可以在其间捕获图像。我有两个屏幕..

  1. 显示地图
  2. 捕获图像(从屏幕1推出)
  3. 当我转到屏幕1到屏幕2.我显示一个ImagePicker并允许用户捕获图像。当我回到第1屏幕时,release所有对象并将其设为nil。此任务通常在viewDidUnload中完成,但我遇到了内存问题,所以当我的视图控制器弹出时我就这样做了。所以,一旦我完成它,我的所有对象都会释放并且为零。

    当我从地图进入登录界面时,我正在做我认识的所有事情:

    1. 从超级视图中删除视图
    2. 释放所有相关对象或保留对象(甚至包括NSString对象)
    3. nil值设置为所有这些对象。
    4. 当我通过分析运行应用程序并且没有运行时泄漏可用但是即使在Activity Monitor中我的应用程序的真实内存也会继续增加:(

      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];
      }
      

2 个答案:

答案 0 :(得分:3)

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

您使用专门的“releaseEverything”方法的方法一直被打破 - 它显示缺乏所有权跟踪,并且最好是黑客攻击。

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

不要与框架作斗争 - 以“正确”的方式进行。

答案 1 :(得分:0)

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

另外,我建议你仔细检查一下你没有运行NSZombieEnabled(在方案中检查),因为它会引起内存警告。