【问题标题】:Object with reference count equals to 0 is still persistent引用计数等于 0 的对象仍然是持久的
【发布时间】:2012-06-16 04:57:30
【问题描述】:

我正在尝试增强我的非 ARC 应用程序中的内存分配。 有一些对象,即使它们的引用计数为 0,它们也被列为两个 heapshot 之间的持久对象。

这是我的主要视图:

让我们以第一个 heapshot (0x6deb180) 中选定的 LSBookChapter 为例。 这是该对象的历史:

为什么那个对象没有被释放?如果引用计数为 0,我无法确定何时过度保留该对象..

【问题讨论】:

  • 如果您正在寻找泄漏,为什么不直接使用泄漏工具呢?分配向您表明您做到了正确,没有错。
  • I am trying to the memory optimization in my non-ARC app 涉及的不仅仅是泄漏。
  • CodaFi:Leaks 工具没有显示该区域的泄漏,无论如何,正如您所看到的,内存仍在增加.. Jack Boy:您能通过这种方式提供更多帮助吗?
  • @CodaFi 首先,在stackoverflow上不需要那种态度。我们正在努力为同一件事做出贡献:帮助提出问题的人。其次,有些情况下您没有泄漏,但仍然存在内存问题。我可以举一个例子:UIWebView 缓存。它不会显示为泄漏(因为它不应该),并且由于大小的增加,您将遇到内存问题。保持对不再使用的类的引用也是一个问题(与内存泄漏无关)。
  • 更不用说除了识别明显的泄漏之外,泄漏实际上毫无用处。有很多方法可以增加内存,这会导致应用程序失败,但不会出现泄漏。当您完成修复已识别的泄漏问题时,您通常才刚刚开始修复您的内存使用情况。

标签: objective-c ios memory-leaks instruments reference-counting


【解决方案1】:

你可能开启了僵尸检测功能吗?

僵尸检测不会导致任何内容被释放,但是 - 可能 - 保留计数将降至零,而且更有用的是,您会看到导致保留和释放导致事件之间的一一对应关系。


另外,如果你没有打开“仅跟踪实时分配”,那么你会在 Instruments 中看到对象被释放后,保留计数为 0,但它确实被释放了。

【讨论】:

    【解决方案2】:

    在我之前的应用程序中,我和您现在一样担心,因为我没有泄漏,但内存在增长。经过一番研究,我偶然发现了this。我确实试图在他的文章上做一些捷径,但最后我只是阅读了整篇文章以真正理解问题所在。是的,我能够查明我遇到的每一个问题。我可能会说我有不少。

    对于您的特定问题,我没有做您现在正在尝试的操作:在不同的堆中查看对象的 retainCount。老实说,我认为这是在浪费时间。我的主要目标是确保如果我做某事并且我反转它,内存不应该增加,或者如果它应该稍微增加(快速示例:进入一个新的UIViewController 并按下按钮返回)。

    【讨论】:

      猜你喜欢
      • 2011-12-14
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 2011-05-15
      • 2011-05-16
      相关资源
      最近更新 更多