在目标C中保留计数返回-1

时间:2010-10-17 04:24:56

标签: objective-c retaincount

我是Objective C的新手,我有一个带有3个对象的NSMutableArray,然后我尝试打印数组的retainCount。为什么最终的retainCount返回-1?感谢

NSLog(@"myArray has retain count of %d", [myArray retainCount]);    
[myArray release];
NSLog(@"myArray has retain count of %d", [myArray retainCount]);

来自控制台的结果:

2010-10-17 11:58:06.407 TestRetainCount [527:a0f] myArray has retain count of 1
2010-10-17 11:58:06.407 TestRetainCount [527:a0f] myArray has retain count of -1

3 个答案:

答案 0 :(得分:3)

在取消分配对象后(可能在发布后发生),您不能再依赖其数据完整。你在保留计数失效后试图相信保留计数。

一般情况下,请勿使用保留计数。永远。使用内存管理编程指南中的规则,您将始终获得正确的引用计数。

答案 1 :(得分:1)

Graham Lee回答了你的例子特有的问题。

不是特定于您的示例,而是针对您的问题(主题):

UINT_MAX通常用于表示不使用引用计数的对象(例如,永远不会取消分配,例如单例)或自定义引用计数实现。

答案 2 :(得分:-1)

由于时间自动释放的对象,不能依赖于准确的retainCount。也就是说,计算你的alloc / init,new,retainins等......并与相应的版本匹配。