【问题标题】:how to release memory,object,viewcontroller when you pop to root ViewController弹出到根 ViewController 时如何释放内存、对象、视图控制器
【发布时间】:2013-03-13 12:33:00
【问题描述】:

我正在使用包含大约 5 个 ViewController 的导航控制器 segue。每个 ViewController 都位于另一个 ViewController 之前,例如安装应用程序。最后一个 ViewController 包含一个按钮,通过这句话可以让你回到第一个 ViewController:

[self.navigationController popToRootViewControllerAnimated:YES];

我的问题是,我怎样才能释放所有对象,ViewController,我在应用程序第一次执行期间存储的内存,当我单击按钮返回第一个 ViewController 时,将环境作为第一次执行。

有什么想法吗?谢谢!

【问题讨论】:

  • “我在第一次执行应用程序期间一直在存储”是什么意思?您是否对这些控制器中的任何一个保持强烈的指示?当您 popToRootViewController 时,如果您不保留指向它们的强指针,则应释放所有其他控制器。
  • 我没有保留任何东西作为强指针(仅nonatomic)。为了澄清你,一个例子是,在一个 ViewController 中,我有一个使用 LocationManager 对象的指南针。即使我调用 pop 方法,该对象仍然处于活动状态并正在升级......
  • 如果使用它的控制器现在被解除分配,你怎么知道它仍然处于活动状态?
  • 因为我有一个 NSLog,它每秒向我显示 LocationManager 包含每次升级的值
  • 好的。我猜这些控制器是持有指向您要从堆栈中弹出的控制器的指针的控制器,因此您需要以某种方式将它们清零。

标签: ios objective-c release uistoryboardsegue


【解决方案1】:

此方法弹出堆栈上除根视图控制器之外的所有视图控制器。

【讨论】:

  • 在我的情况下,我正在使用这样的线程: [self performSelectorOnMainThread:@selector(makeMyProgressBarMoving) withObject:nil waitUntilDone:NO] 并且在方法 pop 之后它仍在工作......任何想法为什么它还在工作吗?
  • 甚至,我正在使用 CLLocationManager 引用,它仍然可以正常工作....所以,我认为我需要一些额外的东西来释放这些对象....
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-21
相关资源
最近更新 更多