2010-08-06 37 views
2

后,我有这段代码:意外保留计数调用CFMakeCollectable

CFDictionaryRef lDictionary = AACreateDictionaryForFile(path); 
if (lDictionary) { 
     printf("retct before: %ld\n", CFGetRetainCount(lDictionary)); 
     CFMakeCollectable(lDictionary); 
     printf("retct after: %ld\n", CFGetRetainCount(lDictionary)); 
     return TRUE; 
} else { 
     return FALSE; 
} 

出人意料的是,代码运行控制台后显示以下的输出:

retct前:1
后 retct :2147483647

我本来期望:

retct前:1
后退:0

我做错了什么?我有不正确的期望吗?

+0

从某种意义上说,你做错了事情,虽然你在做这件事时并不罕见。不要检查保留计数。对他们没有期望。永远不要根据他们做出决定。它们是实现细节,而不是有用的信息。 – walkytalky 2010-08-06 09:03:37

+0

感谢您验证我(几乎)知道我在做什么。我知道保留数并不是很可靠,但我并不十分期待这些结果。无论如何,我只是想确保没有更明显的我失踪的事情。 – Onio 2010-08-06 14:44:16

回答

1

2147483647是(2^31)-1:这是32位有符号整数的最大值。

垃圾回收器当然使用这个值作为一种标志。所以不用担心,你的代码是可以的。