NSString副本没有复制?

Sco*_*len 8 iphone objective-c nsstring

  NSString *myString = @"sample string";
  NSString *newString = [myString copy];
Run Code Online (Sandbox Code Playgroud)

如果我在这两行之后设置断点,myString的指针与newString的指针相同.

WTF?是不是NSString副本应该返回一个指向新对象的指针?或者我错过了关于副本应该如何工作的基本内容?

ste*_*anB 9

既然NSString不可变的很可能就是在内部增加ref count,并用它做.

当你使用release其中一个NSStrings时,它可能会减少ref count- 标准内存管理.

你觉得有什么问题吗?


kiz*_*zx2 8

想一想:NSMutableString是一个子类NSString.当您的财产被声明为NSString,您不希望它改变.

考虑一下,如果你曾经使用过,retain而有人给你一个NSMutableString,然后再改变它,你的课就会被打破.

但是,您可能会认为总是copy很慢.所以NSStringcopy根本要求retain.NSMutableStringcopy做一个实际的副本.

通常最好给吐出一个,NSString *因为人们不必一直复制它.