ios:保留计数2147483647?

时间:2011-08-07 18:48:52

标签: ios count retain

  

可能重复:
  NSString retainCount is 2147483647
  Objective C NSString* property retain count oddity

查看以下代码:

NSString* testString = [[NSString alloc] initWithString:@"Test"];
NSLog(@"[testString retainCount] = %d", [testString retainCount] );
NSMutableArray* ma = [[NSMutableArray alloc] init];
[ma insertObject:testString atIndex:0];
[testString release];
NSLog(@"%@", [ma objectAtIndex:0]);

这是控制台上的输出:

[testString retainCount] = 2147483647
Test

这怎么可能发生?我预计1不是2147483647!

2 个答案:

答案 0 :(得分:1)

使用字符串文字启动NSString对象,并发生以下两件事:

  1. 由于NSString是不可变的-initWithString:方法优化字符串创建,以便你的testString实际上指向你用它创建的同一个字符串(@“Test”)
  2. @“Test”是一个字符串文字,它是在编译时创建的,并且存在于特定的地址空间中 - 你不能解除它,释放和保留不会影响它的保留计数,它是永远是INT_MAX
  3. 如上所述,您仍然应该按照内存管理规则使用字符串对象(因为您使用alloc / init创建它应该释放它)并且你会没事的

答案 1 :(得分:0)

您对retainCount的结果只能有两个期望:

1)它大于1.你无法预测它实际上是多少,因为你不知道还有谁在使用它。你不知道其他人是如何使用它的。这不是你应该关心的数字。

2)人们会告诉你不要使用它。因为你不应该。使用规则来平衡您的保留和发布。不要使用retainCount。它会让你感到沮丧和困惑,没有任何价值。