为什么将retainCount发送到@"Hi"返回-1?

SVA*_*SVA 2 types objective-c retaincount

该方法retainCount应该返回无符号整数.

为什么然后,[@"Hi" retainCount]返回-1?

Ben*_*tto 10

简单的答案是因为@"Hi"是一个字符串文字,它总是会坐在二进制可执行图像中,永远不会"消失",因此保留/释放没有效果,你看到UINT_MAX(看起来像 - 1打印时签名,例如%d).(参见Pete Kirkham关于NSObjects具有这些语义的答案).

除此之外,知道虽然@"Hi"表现得像是一个很有用,但NSString*它实际上是一个编译器创建的类实例CFConstantString(或者可能是NSConstantString,我的调试器不同意某些文档),它包装了文字字符串数据和为您提供NSString*接口.但编译器知道这些字符串是特殊的,无法清理,所以它们的retainCount总是为UINT_MAX(-1)


Pet*_*ham 6

根据Apple的NSObject文档,它应该返回UINT_MAX永远不会被释放的对象.如果您打印UINT_MAX为带符号的int,通常会得到-1,这可能就是您正在做的 - 您如何输出该值?