【问题标题】:ios view controllers keep staking in memoryios 视图控制器不断在内存中放样
【发布时间】:2014-03-09 06:19:23
【问题描述】:

我是 Objective C 的新手。我正在开发我的第一个应用程序。 - 它基本上由 2 个视图控制器组成,我使用 modal segue 在它们之间切换。主 vc 是一个菜单,它为每个菜单项加载具有不同属性的第二个 vc。 - 我注意到当我从一个 vc 切换到另一个时内存不断增加。这是我试图解决这个问题的尝试,但它没有任何区别,而且看起来也不干净。

-(void)viewDidDisappear:(BOOL)animated{
    ViewController *me = self;
    me = nil;
}

在这种情况下处理内存的最佳做法是什么?

【问题讨论】:

  • 您最好在视图控制器之间切换时显示代码。顺便说一句,您的 viewDidDisappear 方法实现是错误的。不要那样做
  • 如何从第二个控制器返回到第一个?
  • 您的代码 sn-p 仅创建一个对对象的新本地引用,然后删除该本地引用(有效地将其保持在与 viewDidDisappear 方法之前相同的状态)。这段代码并没有改变这样一个事实,即显然还有其他东西仍在保持对该 VC 的强烈引用。 “将其设置为nil”技术只有在您使用现有(希望是最后一个)对对象的最后一个strong 引用时才有意义。您必须弄清楚为什么它没有被发布(可能是由于 matt 建议或 rdelmar 暗示的原因)。
  • 我已经弄清楚是什么强烈引用了我的 vc。我使用 viewWillDisappear 使该对象为零,现在内存没有增加。

标签: ios objective-c memory uiviewcontroller segue


【解决方案1】:

问题在于您在两个方向上都使用了模态转场。不要那样做。您每次都只是在创建一个新的视图控制器:您有多个视图控制器堆叠在一起。模态转场的反面(实际上是presentViewController:animated:,毕竟)不是另一个模态转场;它是dismissViewControllerAnimated:(或者,增加了一些复杂性,一个展开的segue)。

【讨论】:

  • 有道理。谢谢马特。
猜你喜欢
  • 1970-01-01
  • 2014-05-14
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
  • 2011-08-18
  • 2012-10-15
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多