代码之家  ›  专栏  ›  技术社区  ›  Michael Waterfall

目标-C dealloc中的保留计数

  •  3
  • Michael Waterfall  · 技术社区  · 16 年前

    我在这里看到一些相当奇怪的东西,我在不同的地方设置了断点 dealloc self 从1到0变化。何时 释放内存

    我在用 print (int) [self retainCount]

    释放内存 我的 NSOperation NSOperationQueue .

    知道为什么吗?

    2 回复  |  直到 16 年前
        1
  •  8
  •   Jens Ayton    16 年前

    对象的保留计数在 -dealloc

    引用计数的正常实现对大于零的值使用外部引用计数请参见 NSIncrementExtraRefCount() NSDecrementExtraRefCountWasZero() 调用,并且extraRefCount已为零,则返回 YES -解除锁定 nsDecrementTextRarefCountWasZero() 无法区分refCount为1和refCount为0。

    那个 NSOperation 如果refCount为零,则表明其未使用正常机制。

        2
  •  -1
  •   djhworld    16 年前

    我不太清楚objective-c如何处理这个问题,但是如果调用dealloc方法,这意味着retain计数已经达到0,所以应该从内存中释放对象。如果对象的retainCount为2,并且调用 [obj release] 一次,您的dealloc方法将永远不会被调用-因此,如果您的断点被命中并写入日志,那么您可以确定对象正在被销毁的路上