基于以下代码,请指教
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
%d
还是 %lu
都会发生很大的变化。最初,我使用 %d
,但收到警告说“转换指定类型为 int 但参数的类型为 NSUInteger(又名 unsigned long)。解决方法是将 %d
更改为 %lu
” str
release
str
后我仍然可以访问 release
? 最佳答案
这可能是一个难以接受的答案,但这是您应该做的:
这可能是因为您从一个常量字符串 (
@"Hello world"
) 开始,当您调用 release 时内存没有被释放,并且 retainCount 很大。但是如果你必须关心retainCount,你就错了。您在正确的位置释放字符串,这很重要 - 以后不要尝试使用它。