@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" 是一个文字,它可能驻留在常量内存中并且不能被释放(所以它应该用非常高的保留计数进行初始化)。

10-07 23:52