decode中的Xcode retaincount = 1

时间:2011-10-27 14:30:13

标签: iphone objective-c

我想知道为什么一个对象的重新计数在其dealloc函数中等于一个。

-(void) dealloc 
{
   NSlog(@"retain count = %i ", [self retaincount]);
   [super dealloc];
}

保持count = 1所以对象如何调用其dealloc函数,尽管它的保持计数等于1。据我所知,该对象在其保留计数仅等于零时调用此函数。

2 个答案:

答案 0 :(得分:9)

因为对象的保留计数永远不能为零。

将其减少为零会浪费周期,因为无论如何都会将对象解除分配。 retainCount 永远不会返回0。

retainCount没用。不要打电话。

  

谢谢。但我怎样才能调试对象的存在?

有几种方式;

  • -dealloc
  • 中的NSLog()
  • 关于dealloc的断点,打印一些东西,继续
  • 使用Zombies
  • 使用分配工具
  • 使用Heapshot analysis

答案 1 :(得分:3)

您可以在dealloc调用之前在[super dealloc];方法中认为该对象仍然存在。这允许您在self上调用消息以在dealloc中进行一些清理。这就是为什么[super dealloc];应始终最后调用的原因。 This post详细说明了为什么你不应该对dealloc(或者就此而言,任何地方)的保留计数给予任何重视。