【问题标题】:Retain count in objective C return -1在目标 C 中保留计数返回 -1
【发布时间】:2025-12-04 07:30:01
【问题描述】:

我是 Objective C 的新手,我有一个 NSMutableArray,里面有 3 个对象,然后我尝试打印数组的 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

【问题讨论】:

    标签: objective-c retaincount


    【解决方案1】:

    对象被释放后(可能在释放后发生),您不能再依赖其数据完好无损。您正在尝试信任失效后的保留计数。

    一般来说,不要使用保留计数。曾经。使用内存管理编程指南中的规则,您将始终获得正确的引用计数。

    【讨论】:

      【解决方案2】:

      Graham Lee 回答了您的示例所特有的问题。

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

      UINT_MAX 通常用于表示不使用引用计数的对象(例如,从不释放,例如单例),或自定义引用计数实现。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • GC 中没有保留计数(至少在 ObjC 术语中没有)。而且,正如 Graham 所说,您实际上永远不会看到保留计数为 0,因为此时对象已经被释放。