【问题标题】:iOS popViewController does not free memory and dealloc not callediOS popViewController 不释放内存并且不调用 dealloc
【发布时间】:2014-03-08 16:20:48
【问题描述】:

我在 ARC 下的内存管理有一些问题。当我在我的应用程序中弹出视图控制器时,它们都不会释放内存,有时不会调用视图控制器的 dealloc。即使调用了 dealloc,内存仍然没有被释放。所以我问即使调用 viewController 的 dealloc 方法也会占用内存?什么会导致不调用dealloc?很少有可能是动画,代表?还有什么?

【问题讨论】:

    标签: ios objective-c memory-management automatic-ref-counting dealloc


    【解决方案1】:

    Xcode 9 为查找此类问题提供了一个很好的工具。它被称为:“Debug Memory Graph”。 使用它,您可以按类类型找到您泄漏的对象,并且您可以清楚地看到谁拥有对它的强引用,通过从那里释放它可以解决您的问题。

    See more info about how to use it

    【讨论】:

      【解决方案2】:

      如果不调用 dealloc,则某些对象对视图控制器具有强引用。您需要检查您的代码并寻找强引用循环。

      不要指望您的内存会随着您推送视图时的增加而减少。 iOS 会在内存中缓存大量内容以提高性能,例如图像、字符串文字等。只要确保不会在对象上停留的时间超过您需要的时间。

      【讨论】:

      • 谢谢!!那么如果调用了dealloc,是不是说明内存管理没问题呢?我有一个视图控制器,它有一个 AVCaptureSession 对象,调用了 dealloc,但是在推送和弹出视图控制器 4-5 次之后,内存是三倍的,并且以后推送需要更长的时间。那个怎么样?知道吗,我还需要释放 viewController 中的其他对象吗?
      • 您通常不需要释放视图控制器内的其他对象。因为只有视图控制器对这些对象有引用,所以在你的视图控制器被释放后它们会被自动释放。
      • AVCaptureSession 在内存管理方面没有什么特别的不同。只需确保在该视图控制器中没有所有对象都指向对方。如果您需要帮助查看它,我建议您专门发布一个关于该视图控制器的新问题,并包含其所有相关代码(或者,理想情况下,尝试在一个小型示例项目中重现该问题)。
      • 我发现了问题,AVCaptureSession 是问题所在,我需要在第 3 方库中添加一个 closeSession 方法,该方法在我返回之前删除会话中的所有输入。谢谢。
      • @TungVo 如果答案对您有帮助,请使用我答案左侧的复选框图标将其标记为正确。这将阻止您的问题显示为未回答。
      猜你喜欢
      • 2016-01-24
      • 2019-08-12
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      相关资源
      最近更新 更多