2012-10-26 135 views
0

我正在用MapView和UIImagePicker创建一个应用程序。我在屏幕上显示地图,并在用户移动时显示其路线。用户可以在两者之间捕捉图像。我有两个屏幕为..Iphone内存警告问题

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

当我去到屏幕1到屏幕2.我表现出ImagePicker和允许用户捕捉图像。当我回到屏幕1 I release所有对象,并使其nil。这项任务通常在viewDidUnload完成,但我得到的内存问题,所以我做了它,当我的视图控制器弹出。所以我的所有对象都会在释放它们之后立即得到释放,并且一旦我完成它们就会立即释放。

当我去我的登录屏幕从地图上我做的每一个我知道的东西,如:

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

当我运行的分析应用程序,并没有运行时泄漏缴费但即使在活动监视器我的应用程序的实际内存continuesly得到提高:(

10-12图像捕捉得到我得到Received memory warning. Level=1我连存储UIImage对象在内存中。我在文件目录写这仅存储路径字符串。

请帮助我,指导我还有什么可以做,以解决这个问题。

UPDATE

虽然上后退按钮释放对象我使用:

- (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]; 
} 
+0

向我们展示一些代码 – basvk

+0

@basvk我已经添加了我用来释放内存的方法的代码..其余部分都是正常的alloc init和pusvc以及呈现vc等。 –

+0

为什么你现在还在使用ARC –

回答

0

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

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

+0

是的僵尸运行,特别是在较旧的硬件上,可能会导致内存警告,因为没有任何内容被删除。 – ahwulf

3

ARC是支持4.3为好,所以用它。

你的方法与专用的“releaseEverything”方法一路被打破 - 它显示缺乏所有权跟踪,最好是黑客。

viewDidUnload现在已被弃用,而不是由iOS 6系统调用(您应该构建它)。

不要打架子 - 做到“正确”的方式。

+0

我也知道这一点,但我不知道为什么苹果在本文中提到了部署目标5.x http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/ObjCAvailabilityIndex/_index .html for ARC –

+0

iOS 4.3中唯一的限制是你不能使用'weak'限定符,因为它需要一个运行时才能删除被引用的对象,你可以使用_unsafe_unretained替代我最近做了一个过渡到ARC项目支持iOS 4.3,它可以很好地工作 – DarthMike

+0

@Eiko谢谢你的回复..如何在4.3中使用arc?请问你能否提供一些链接.. –