复制NSMutableString实例返回-1的retainCount

时间:2010-02-14 21:04:17

标签: objective-c retain

有人可以解释为什么最后一行打印出-1?当在NSMutableString上调用copy时会发生这种情况,我希望strFour的returnCount为1,因为应该返回一个不可变的副本。

    NSMutableString *str =[NSMutableString stringWithString:@"hi"];
NSLog(@"new instantiated variable has a retain cout:");
NSLog(@"%d",[str retainCount]);  //1, str is a pointer, its value is a memory address

NSMutableString *strFour =[str copy]; //receiver str is mutable, copy returns an immutable 
NSLog(@"%d",[strFour retainCount]); ////strFour s retain count should be 1, but it had a retain count of -1

非常感谢。

1 个答案:

答案 0 :(得分:3)

永远不要费心查看对象的保留计数。这样做总是毫无意义的。保留计数可能受到“引擎盖下”优化的影响。这些优化依赖于您的代码遵循Cocoa Memory Management Guidelines的事实。只是担心坚持这些指导方针,不要直接考虑保留计数。

它可能是(-1)的一个原因是因为字符串“hi”可以在某处缓存而你的副本指的是缓存的字符串。请记住,保留计数实际上是无符号整数。 documentation dor -retainCount表示对于永不释放的对象,保留计数应为UINT_MAX(当打印为带符号的十进制时,将显示为“-1”)。