@property (retain) NSString *testString;
self.testString = [[NSString alloc] initWithString:@"aaa"];
[self.testString retain];
self.testString = [NSString stringWithString:@"a"];
[self.testString release];
[self.testString release];
让我们一行一行地进行:
第 2 行:保留 testString = 2 的计数
第 3 行:保留 testString = 3 的计数
第 4 行:保留 testString = 1 的计数
第 5 行:保留 testString = 0 的计数
第 6 行:它应该崩溃
即使在 CoreFoundation 中还有其他东西持有
testString
,它最终也会消失。但该应用程序永远不会因此而崩溃。任何人都可以解释这个?谢谢!
最佳答案
我不是这方面的专家,所以请持保留态度。我猜 [NSString stringWithString:@"a"]
可能只返回文字字符串 @"a"
,即它只返回它的参数。由于 @"a"
是一个文字,它可能驻留在常量内存中并且不能被释放(所以它应该用非常高的保留计数进行初始化)。