【问题标题】:Leak in Instruments, Reference Count and Autorelease仪器泄漏、参考计数和自动释放
【发布时间】:2012-01-01 16:46:16
【问题描述】:

Instruments 向我报告 NSDate 变量泄漏。但是,如果我将保留和释放加起来,我认为它应该能够通过自动释放池释放。可能我数错了,但我不能确定。看看 RefCt。 如果我 [Class alloc] 它的保留计数应该为 1,那么如果我自动释放该对象,它应该能够释放,或者不是吗?

【问题讨论】:

    标签: cocoa-touch cocoa instruments memory-leaks


    【解决方案1】:

    Instruments 会为您添加保留和释放。这就是“RefCt”列向您显示的内容:运行总计。

    如果我 [Class alloc] 它应该提出保留计数为 1,...

    确实如此;这是列表中的第一行。

    ...那么如果我自动释放该对象,它应该能够释放,或者不是吗?

    自动释放不是立即的 -1;它会导致稍后发布,那是 -1。

    所以你有:

    1. 分配:+1 (=1)
    2. 自动释放:目前为 0;导致稍后发布(现在没有变化,所以仍然 =1)
    3. 保留:+1 (=2)
    4. 发布:-1 (=1)
    5. 保留:+1 (=2)
    6. 保留:+1 (=3)
    7. 发布:-1 (=2)
    8. 发布:-1 (=1)

    请注意,三个 Release 之一是由 Autorelease 引起的。只有这样才会产生 -1。

    对象需要另一个释放才能被释放。在那之前,它不会发生。

    是的,如果一个对象有足够多的未完成的自动释放来杀死它,因为在此之前被保留并因此保持活动状态是可能的。我曾经看到一个我保留不足的对象发生这种情况,但那是绑定使用的属性的值; Binding 保留了该值,因此即使在我自动释放了我自己的最后一次所有权之后,它仍然保持活动状态。

    【讨论】:

      猜你喜欢
      • 2011-03-09
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 1970-01-01
      • 2011-06-18
      相关资源
      最近更新 更多