有人可以解释为什么最后一行打印出-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
非常感谢。
答案 0 :(得分:3)
永远不要费心查看对象的保留计数。这样做总是毫无意义的。保留计数可能受到“引擎盖下”优化的影响。这些优化依赖于您的代码遵循Cocoa Memory Management Guidelines的事实。只是担心坚持这些指导方针,不要直接考虑保留计数。
它可能是(-1)的一个原因是因为字符串“hi”可以在某处缓存而你的副本指的是缓存的字符串。请记住,保留计数实际上是无符号整数。 documentation dor -retainCount
表示对于永不释放的对象,保留计数应为UINT_MAX
(当打印为带符号的十进制时,将显示为“-1”)。