【问题标题】:Swift - Memory increasing when going 'in' and 'back' from UIViewControllersSwift - 从 UIViewControllers “进入”和“返回”时内存增加
【发布时间】:2016-01-20 09:00:02
【问题描述】:

我要进出UIViewControllers。 每次我进去时,内存都会增加,但是当我出去(按返回)时,内存并没有减少。

我有弱的@IBOutlets、vars 和 let。

我该如何解决?

附言其中一个@IBOutlet 是指向另一个UIViewController 的容器

【问题讨论】:

  • 您是否尝试过使用仪器查看保留的内容?
  • 尝试给deinit(Swift)或者dealloc(Obj-c)方法设置断点,看是否被调用。并提供一些代码
  • 如果您在 iOS 8+ 中使用 Master-Detail Application 模板,请注意,当您回击时,视图仍然存在,直到您推送另一个视图。如果您像@katleta3000 提到的那样在 deinit 或 dealloc 代码中编写一些调试代码,您可以很容易地看到这种行为。
  • @katleta3000,没有调用 deinit!我想我有一个保留周期

标签: ios swift memory uiviewcontroller


【解决方案1】:

忽略建议保留/释放断点的 cmets 并在您的代码中添加日志调用;这是一个笨拙的策略,错过了整个类别的问题。 Abizern 使用 Instruments 的建议更加明确。运行 Leaks 工具以查找泄漏的实例。也浏览其他记忆工具。 Instruments 是一个 &@&$&-ing 神奇的调试工具,许多开发人员出于我无法理解的原因忽略了它。花几分钟学习教程,您将在整个职业生涯中节省数月的调试时间。

【讨论】:

  • 我会试试的。谢谢你。请让我知道你对我已经找到的东西的看法:stackoverflow.com/a/33275276/1341180
  • 很难说,但看起来你的方法确实有点尴尬。您需要用更详细的架构描述以及如何在它们之间传递数据来更新您的问题。有些东西似乎……很奇怪。 :-)
【解决方案2】:

听起来你每次在视图之间切换时都在创建一个新的 UIViewController。尝试将 segue 创建为展开 segue,这将从堆栈中删除当前视图。否则,您似乎只是在不断地添加视图堆栈。告诉我这是否有效。

【讨论】:

  • 我正在使用 segues,我只是忘记在关闭 VC 之前释放我正在转移到子 VC 的项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
  • 1970-01-01
  • 2019-08-10
相关资源
最近更新 更多