2012-07-16 59 views
0

我想打印出使用NSLog终端中的对象的保留计数。这里是我的代码:如何打印对象的保留计数?

NSNumber *myInt=[[NSNumber alloc] initWithInteger: 100]; 
NSLog(@"myInt retain count=%d",[myInt retainCount]); 

结果应该是1但我在终端得到的是-1。我试图使用%u而不是%d,并最终以4294967295结果。有谁知道为什么发生这种情况?

+1

'retainCount'没用。别叫它。你所看到的是一个实现细节;返回的'NSNumber'可能是一个*标记的指针*,因此没有分配,也没有什么可以保留。 – bbum 2012-07-16 16:17:04

+0

因此,所有关于returnCount功能的书都只是简单的扯皮呢? – 2012-07-17 12:29:23

+1

他们可能被误导而不是扯皮,但他们不准确。 Yup; – 2012-07-17 12:37:14

回答

3

@bbum送过来之前,我可以说了:

不要在你的代码

依靠-retainCount它不会给你解答你的期望。事实证明,答案-1在这里是正确的,你不认为这是正确的事实是因为框架正在做你背后不知道的事情。使用自动引用计数(ARC),或者如果您必须使用手动保留/释放,请按照内存管理指导原则进行操作,而不使用-retainCount方法。

+0

我的代码基于一些旧例子。这是否意味着Apple在某个时候已经改变了Objective-C,因此retainCount不再像过去那样运行? – 2012-07-16 15:42:16

+0

不;除非在非常有限的情况下,retainCount永远不可靠。 – 2012-07-16 15:48:45

+0

ARC是否会返回retainCount应返回的内容?那么保留呢?它是否也行为不端? – 2012-07-17 12:27:44