[英]Objective-C retain counts in dealloc
我在这里看到一些相当奇怪的东西,我在我的app中设置了各种dealloc
方法的断点,并且在检查时,对象self
的保留计数从1到0变化。当调用dealloc
,将保留计数对象是否已设置为0?
我在控制台中使用print (int) [self retainCount]
来测试它。
0似乎只出现在我的NSOperation
的dealloc
中,这些是在NSOperationQueue
中运行的。
知道为什么会这样吗?
在-dealloc
对象的保留计数-dealloc
。 出于实际目的,它是未定义的。
引用计数的正常实现使用大于零的值的外部引用计数 - 请参阅NSIncrementExtraRefCount()
和NSDecrementExtraRefCountWasZero()
。 当extraRefCount计数为零时,refCount为1。 当NSDecrementExtraRefCountWasZero()
并且extraRefCount已经为零时,它返回YES
并-dealloc
。 除了处理NSDecrementExtraRefCountWasZero()
的返回值时,无法区分refCount为1和refCount为零。
NSOperation
获得零refCount表明它没有使用正常机制。
我不太确定objective-c如何处理这个问题但是如果调用dealloc方法,则意味着保留计数已经达到0,因此应该从内存中释放对象。 没有别的方法,如果你的对象有一个retainCount为2并且你调用[obj release]
一次,你的dealloc方法永远不会被调用 - 所以如果你的断点被命中并写入Log那么你可以肯定物体正在被毁灭的路上
请记住,您的对象将继承NSObject,因此您应该在dealloc方法中调用[super dealloc]调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.