ios:保留2147483647的计数?

标签 ios count retain

<分区>

Possible Duplicates:
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!

最佳答案

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

  1. 由于 NSString 是不可变的 -initWithString: 方法会优化字符串创建,以便您的 testString 实际上指向您使用 (@"Test") 创建的同一字符串
  2. @"Test"是一个字符串文字,它在编译时创建并存在于特定的地址空间中 - 您无法释放它,释放和保留不会影响其保留计数,并且它是始终为 INT_MAX

如上所述,您仍然应该遵循内存管理规则来使用字符串对象(因为您使用 alloc/init 创建了它,所以应该释放它),这样就可以了

关于ios:保留2147483647的计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6974943/

上一篇:iphone - 将 XIB 从变量切换到 View Controller

下一篇:ios - 如何使用imagemagick获得圆角、渐变抛光的iOS图标图像效果?

相关文章:

python - 重置滚动总和

ios - 从 NIB 加载后,IBOutlet 实例为(空)

ios - 为什么在 id<NSCopying> 上保留会发出警告?

php - 尽管有 mysql 条目,NSArray 在 iOS 中为空

ios - Sentry 错误 - IndexSizeError : The index is not in the allowed range

mysql - 使用两个表在 MySQL 中实现 Count() 和 Group By()

mysql - 根据一列值的计数过滤查询结果?

objective-c - 澄清分配后何时释放指针

iphone - 计算UIScrollView的位置

ios - iPad 上的 Google 网络字体