【问题标题】:Dealloc not called on all view controllers when using unwind segues使用 unwind segues 时未在所有视图控制器上调用 Dealloc
【发布时间】:2014-07-05 21:33:51
【问题描述】:

我正在设计一个有 6 个视图控制器的游戏。

我使用 modal segues 向前导航并展开 segues 向后导航。

通过视图控制器的游戏流程是 A -> B -> C -> D -> E -> F。

当我尝试从 F 放松到 A 时,dealloc 只在 B 和 C 上调用。这意味着每次玩游戏时,使用的内存都在不断增加。

我最初认为问题是由于某些东西被保留导致无法在视图控制器 D 和 E 上调用 dealloc。但是,如果我将 unwind segue 设置为从 F 到 D,那么 F 和 E 都会调用 dealloc似乎可以排除这个问题。

我还有一条直接从视图控制器 A 到 F 的路由。在这种情况下,当我展开时,会在 F 上正确调用 dealloc。

视图控制器 F 和 C 在 A 上调用相同的展开操作。我认为这不是原因,因为我尝试将其更改为对每个视图控制器使用唯一的展开操作。

对造成这种情况的原因有什么想法吗?我复制了下面使用的一些代码。请让我知道哪些其他代码(如果有)将有助于解决此问题。任何帮助将不胜感激。

如下展开动作:

- (IBAction)unwindToMainMenu:(UIStoryboardSegue *)unwindSegue
{}

调用以触发从视图控制器 F 到 A 的展开 segue:

[self performSegueWithIdentifier:@"ReturnToMainMenu" sender:self];

【问题讨论】:

  • 您是否尝试过使用“Leaks”工具,它可以指出保留周期并为您提供任何对象的所有保留/释放的历史记录?
  • 我试过泄漏仪器,但我不太熟悉。它向我指出 PrepareForSegue 是问题所在,但我不确定如何解释它。我对 iOS 开发还很陌生 :)
  • 好吧,我们无法为您提供的信息提供帮助,所以我建议您观看一些有关如何使用仪器的 WWDC 视频,或者创建一个显示问题的最小示例项目你看到了,所以我们可以提供帮助。
  • 什么信息会有帮助?我可以提供更多代码,只是不想把我所有的代码都扔到页面上:)
  • 你应该尝试创建一个最小的例子:stackoverflow.com/help/mcve

标签: ios xcode segue uistoryboardsegue dealloc


【解决方案1】:

根据您的描述,问题应该出在D。 可能D 从其他人那里保留,所以当你从F 直接转到A它不会被释放没有被释放它继续保留 E 保留F

所以,请专注于D ;)

【讨论】:

  • 知道如何缩小问题所在吗?我已经坚持了几天了。我几乎删除了所有代码以尝试定位问题,但它仍然存在。
  • 什么可能导致保留问题?我已经尝试了分析工具和泄漏,并且没有明显的泄漏。
  • 你在使用外部库做某事吗?一周前我有类似的东西..最后问题出在第三方库...更换它,一切都很好。
  • 我唯一使用的第 3 方是 Google Admob,但我有最新版本。
  • 感谢您的帮助。我已按照您的建议在视图控制器 D 中找到了问题,现在已修复。问题是我设置了 [self becomeFirstResponder] 但没有调用 [self resignFirstResponder] 将其添加到 prepareForSegue 解决了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-23
  • 2015-06-28
  • 2014-01-13
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多