Jam*_*sev 4 memory-management objective-c
根据以下代码,请指教
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
Run Code Online (Sandbox Code Playgroud)
最初我想知道为什么数字这么大但后来看到一个帖子解释它.试问,而不是...为什么这个号码改成我大大是否使用%dVS %lu.最初,我使用过%d,但得到一个警告,说" 转换指定类型int但参数的类型为NSUInteger(也就是unsigned long).修复是%d改为%lu"
为什么保留计数不减少?str发送后,大数字仍然显示不变release
为什么我str发送后仍能访问release?
这可能是一个难以接受的答案,但这是你应该做的:
这可能是因为你使用常量字符串(@"Hello world")开始,当你调用release时内存没有被释放,并且retainCount很大.但是如果你不得不关心retainCount,你就错了.
你正在正确的位置释放字符串,这才是最重要的 - 不要试图以后再使用它.