客观的c - 释放问题

时间:2010-06-06 20:29:29

标签: objective-c

  

可能重复:
  NSNumber retain count issue

您好, 我有以下代码:

 NSNumber *number = [NSNumber numberWithInt:5];
 int i = [number retainCount];
 [number release];
 i = [number retainCount];
        [number release];
        i = [number retainCount];

问题是在第2行中,参数i的值是2 在第4行中,该值为1。 然后在第6行中,该值仍为1. ?????????

首先我不明白为什么在初始*号之后,零售额是2而不是1? 第二我不明白为什么在释放后2次retaincount不是0? 无论多少次我释放对象,零售额都会保持1。

1 个答案:

答案 0 :(得分:3)

问题是你永远不应该看一个对象的'retainCount',除非你真的知道你在做什么,它只会让你感到困惑。

正在发生的事情是NSNumber在幕后做了些什么。我不确定是什么,我通常不在乎。如果我创建一个卑鄙,我负责释放它。只要我履行自己的职责,一切都将按计划进行。

在您的具体示例中,您将获得对“NSNumber”的引用并将其释放两次。由于您不拥有该对象,因此您根本不应该释放它。


澄清一下,你不应该考虑保留计数的原因是它经常会误导你。从评论中的链接引用@chuck。

  

如果您怀疑自己有泄漏,应该检查用于此目的的实际调试工具,而不是查看保留计数。对于您正在撰写的代码,您应该主要关注遵循我上面链接的指南。