根据以下代码,请指教
NSString *str= [[NSString alloc] initWithString:@"Hello world"];
NSLog(@"Length: %lu\n", [str length]); // 11
NSLog(@"Retain count is %lu\n", [str retainCount]); //1152921504606846975
[str release];
NSLog(@"%lu\n", [str length]); // 11
NSLog(@"Retain count is %lu\n", [str retainCount]); //1152921504606846975
本来我想知道为什么这个数字这么大,但后来看到了一个a发帖解释一下 https://stackoverflow.com/questions/1390334/nsstring-retain-count。让我问这个......为什么这个数字变化很大,无论我使用%d
vs %lu
。本来,我用的是%d
,但收到警告说“转换指定类型为 int,但参数的类型为 NSUInteger(又名 unsigned long)。解决办法是改变%d
to %lu
"
为什么保留计数不减少?大数字仍然显示不变,之后str
已发送release
为什么我仍然可以访问str
, 发送后release
?
这可能是一个难以接受的答案,但这是你应该做的:
-
别担心。(就 %d/%lu 而言,这些说明符只是期望不同的数据类型,并且 %d (int) 与 %lu (unsigned long) 相比具有更小且不同的范围)
- 别担心。
- 不要这样做,尤其不要依赖它。
这可能是因为你从一个常量字符串开始(@"Hello world"
)表明当您调用release时内存没有被释放,并且retainCount很大。但如果您必须关心保留计数,那么您就做错了。
您在正确的位置释放了字符串,这才是最重要的——以后不要尝试使用它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)