NSString保留Count

its*_*ode 6 objective-c

只是几天我正在研究一个项目,我必须看看什么是一个字符串的保留计数.

但它总是让我回复"2147483647",为什么会如此呢?

查看此代码以自行检查.

NSString *str = [[NSString alloc] initWithString:@"Hello World"];
NSLog(@"String Retain Count: %i", [str retainCount]); 
Run Code Online (Sandbox Code Playgroud)

所以我的问题是为什么它没有返回1像其他对象返回,为什么我得到"2147483647"

提前致谢.

Dav*_*ong 26

编译器比你聪明.

它看到@"Hello world"并想到"啊哈!一个恒定的弦!"

然后它看到[[NSString alloc] initWithString:@"Hello world!"]并想到"啊哈!一个用常量字符串创建的不可变对象!"

然后,它崩溃两者分解成一个单一的NSConstantString,它具有retainCountUINT_MAX,所以它可以永远不会被释放.

  • @itsaboutcode我建议不要在retainCounts方面考虑这个问题,而是考虑"我分配了这个字符串,所以我必须释放它",并让retainCounts自行排序.在我用Objective-C编写的几年中,当我需要使用retainCount时,我想不出单个实例.如果你遵循内存管理规则,你会没事的. (2认同)