保留计数-1:有人可以向我解释一下吗?

时间:2013-10-17 11:09:23

标签: release init retain counting alloc

图像解释了问题(这不是荒谬??!)

enter image description here enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

首先,-retainCount方法返回无符号整数,因此根据定义,它不能为负数。您正在以错误的形式打印它,因为您错误地认为它是一个有符号整数。它实际上是NSUIntegerMax

其次,-retainCount一般没用。即使the documentation说:

  

请勿使用此方法。 (所需的)

     

...

     

此方法在调试内存管理问题时没有任何价值。   因为任何数量的框架对象都可能保留了一个对象   为了保持对它的引用,同时自动释放   池可能在一个对象上持有任意数量的延迟版本   你不太可能从这种方法中获得有用的信息。

第三,类可以覆盖-retainCount并返回自定义内容。这通常在具有自定义内存管理特性的类中完成,使用保留计数无法很好地描述。这是这种情况,因为来自字符串文字的字符串对象是静态分配的,并且在程序的整个生命周期中都存在。它们不受内存管理。因此,他们返回虚假保留计数NSUIntegerMax