为什么在[对象发布]之后retainCount仍为1?

时间:2011-03-22 12:48:59

标签: iphone objective-c

NSLog(@"first:%u",[object retainCount]);
[object release];
NSLog(@"second:%u",[object retainCount]);

输出:

first:1
second:1

为什么对象不会被释放?

5 个答案:

答案 0 :(得分:13)

来自retainCount方法的NSObject引用的引用

  

此方法通常没有价值   在调试内存管理问题。   因为任何数量的框架   对象可能保留了一个对象   为了保持对它的引用,同时   同时自动释放池可能   持有任何数量的延期   在一个对象上发布,它非常   你不太可能得到有用的东西   这种方法的信息。

答案 1 :(得分:4)

可以释放对象,但不会在您认为它时发布。基本上,不要看retainCount。它可能不会改变,直到下一个runloop或者根本不是,它是一个实现细节。您将了解何时需要发布以及何时没有经验但直到那时依赖于铿锵声分析器。

答案 2 :(得分:1)

首先,retainCount没有为您提供可以使用的号码。这毫无意义。

其次,retainCount为0的原因是可能是,您尝试使用不再存在的对象 。您很幸运,您的应用程序不会崩溃,因为您访问的内存无效。在解除分配对象之前减少retainCount是不必要的,因此Apple不会这样做,可能是

答案 3 :(得分:1)

将任何数字除以零,您将找到“保留计数为零的对象”的含义。

答案 4 :(得分:-1)

我同意其他关于不使用retainCount获得可靠计数的评论。

编辑:忽略我下面的愚蠢......:)

但是,我观察到将相应的属性设置为nil ...

self.object = nil;

retainCount确实会立即减少。