2

有人可以解释为什么最后一行打印出-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

非常感谢。

4

1 回答 1

3

永远不要费心查看对象的保留计数。这样做总是没有意义的。保留计数可能会受到“幕后”优化的影响。这些优化依赖于您的代码遵循Cocoa 内存管理指南这一事实。只需担心遵守这些准则,不要费心直接查看保留计数。

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

于 2010-02-14T21:08:46.590 回答