【问题标题】:viewController's dealloc don't be called when called navigationController popViewControllerAnimatedviewController 的 dealloc 在调用 navigationController popViewControllerAnimated 时不会被调用
【发布时间】:2012-08-24 10:51:48
【问题描述】:

我有一个 MyViewController,它基于 UIViewController,我像下面的代码一样使用它:

MyViewController *nextViewController = [[MyViewController alloc] init]; [self.navigationController pushViewController:nextViewController animated:YES]; [nextViewController release];

在 MyViewController 中,带有一个用户事件,有以下代码:

[self.navigationController popViewControllerAnimated:YES];

现在,我发现,MyViewController 的 dealloc 没有被调用,但是,当我将 App 切换到后台时,例如,通过 home 按钮,dealloc 方法已经被调用了!这是个大问题!会有很多 MyViewController 不会被释放,当用户转到一个 MyViewController 时,一次又一次地返回,只是,只有当 App 进入后台时,才能释放大量内存。

那么,谁能帮我解决这个问题,谢谢!

【问题讨论】:

    标签: ios memory-leaks dealloc navigationcontroller popviewcontrolleranimated


    【解决方案1】:

    显而易见的原因是某些东西保留了您的 viewController。您将不得不仔细查看您的代码。您是否在课堂上使用委托做任何事情,因为他们有时会保留委托。 NSURLConnection 将保留你的类,NSTimer 也是如此。您可以在班级中分散代码并记录班级的保留计数,并尝试找出在哪里。在您到目前为止显示的代码中,retain 应该只是 1,因为该类仅由导航控制器保留。

    另外,在弹出视图之前,获取对它的引用,在没有动画的情况下弹出它,然后向它发送一些消息,让它报告保留计数(这将是您编写的一些新方法)。这个新方法还可以记录其他事情,比如它是否有任何计时器在运行、NSURLConnections 等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-07
      • 2012-05-09
      • 1970-01-01
      • 2013-11-04
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多