您好, 我有以下代码:
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。
答案 0 :(得分:3)
问题是你永远不应该看一个对象的'retainCount',除非你真的知道你在做什么,它只会让你感到困惑。
正在发生的事情是NSNumber在幕后做了些什么。我不确定是什么,我通常不在乎。如果我创建一个卑鄙,我负责释放它。只要我履行自己的职责,一切都将按计划进行。
在您的具体示例中,您将获得对“NSNumber”的引用并将其释放两次。由于您不拥有该对象,因此您根本不应该释放它。
澄清一下,你不应该考虑保留计数的原因是它经常会误导你。从评论中的链接引用@chuck。
如果您怀疑自己有泄漏,应该检查用于此目的的实际调试工具,而不是查看保留计数。对于您正在撰写的代码,您应该主要关注遵循我上面链接的指南。