我想知道为什么一个对象的重新计数在其dealloc函数中等于一个。
-(void) dealloc
{
NSlog(@"retain count = %i ", [self retaincount]);
[super dealloc];
}
保持count = 1所以对象如何调用其dealloc函数,尽管它的保持计数等于1。据我所知,该对象在其保留计数仅等于零时调用此函数。
答案 0 :(得分:9)
因为对象的保留计数永远不能为零。
将其减少为零会浪费周期,因为无论如何都会将对象解除分配。 retainCount 永远不会返回0。
和
谢谢。但我怎样才能调试对象的存在?
有几种方式;
答案 1 :(得分:3)
您可以在dealloc
调用之前在[super dealloc];
方法中认为该对象仍然存在。这允许您在self
上调用消息以在dealloc中进行一些清理。这就是为什么[super dealloc];
应始终最后调用的原因。 This post详细说明了为什么你不应该对dealloc(或者就此而言,任何地方)的保留计数给予任何重视。