单个ViewController应用程序中的内存保留周期是不可能的吗? (Swift / IOS)

时间:2018-02-19 04:40:50

标签: ios swift memory-leaks automatic-ref-counting retain-cycle

我记得在YouTube上观看斯坦福大学的CS193P(是的,我是一个聪明的bunz)...这就是所谓的内存泄漏或者#34;保留周期" - 一些非常糟糕的事情 - 当你做这样的事情时会发生:

  • 引用自我。在完成块内
  • 引用自我。在计时器回调中
  • 引用自我。在SyncQueue.sync()方法中
  • 引用自我。在DispatchQueue.main.async()方法中

解决方案通常似乎是使用"弱自我"改为参考。

我有104个异步自我。我的ViewController中的引用就是为什么我有点担心。

但是......这个应用程序是一个单页应用程序...而且所有这些都是自我。引用指向这个主ViewController(或它的一个永久子视图),它始终存在,永远不会被解雇,永远不会从堆栈中弹出。"

我的应用程序似乎工作正常...而且我没有看到总内存使用情况变得混乱......所以这是否意味着我可以在这方面保留我的(ViewController)代码?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

以下是两种情况,您可能会后悔没有修复您的代码:

  • 如果您的应用在后台时设备内存不足,则可以删除视图控制器及其视图的某些方面。看到这个(虽然陈旧,但仍然很有趣)article。这可能会在未来的iOS版本中更加显着地影响您的应用,或者甚至可能现在取决于您的代码正在做什么。

  • 提前6个月,你或你团队中的其他人正在为你的另一个应用程序借用你的一些代码。你(或他们)可能会被烧伤。最好立即修复代码。修复程序不应该导致主要的重构,但如果你找到一个,那么你总是可以在该行插入一个大的警告注释。