繁体   English   中英

Objective-C保留dealloc中的计数

[英]Objective-C retain counts in dealloc

我在这里看到一些相当奇怪的东西,我在我的app中设置了各种dealloc方法的断点,并且在检查时,对象self的保留计数从1到0变化。当调用dealloc ,将保留计数对象是否已设置为0?

我在控制台中使用print (int) [self retainCount]来测试它。

0似乎只出现在我的NSOperationdealloc中,这些是在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM