图像解释了问题(这不是荒谬??!)
答案 0 :(得分:1)
首先,-retainCount
方法返回无符号整数,因此根据定义,它不能为负数。您正在以错误的形式打印它,因为您错误地认为它是一个有符号整数。它实际上是NSUIntegerMax
。
其次,-retainCount
一般没用。即使the documentation说:
请勿使用此方法。 (所需的)
...
此方法在调试内存管理问题时没有任何价值。 因为任何数量的框架对象都可能保留了一个对象 为了保持对它的引用,同时自动释放 池可能在一个对象上持有任意数量的延迟版本 你不太可能从这种方法中获得有用的信息。
第三,类可以覆盖-retainCount
并返回自定义内容。这通常在具有自定义内存管理特性的类中完成,使用保留计数无法很好地描述。这是这种情况,因为来自字符串文字的字符串对象是静态分配的,并且在程序的整个生命周期中都存在。它们不受内存管理。因此,他们返回虚假保留计数NSUIntegerMax
。