【发布时间】:2011-02-01 01:31:35
【问题描述】:
NSString *myString = @"sample string";
NSString *newString = [myString copy];
如果我在这两行之后设置断点,myString 的指针与 newString 的指针相同。
WTF? NSString 副本不应该返回指向新对象的指针吗?还是我错过了一些关于副本应该如何工作的基本知识?
【问题讨论】:
-
我不知道答案,但是如果您更改 myString 则两者都有不同的地址...直到字符串的内容相同,它位于相同的地址...
-
首先,您实际上并没有调用 copy,而是调用了 stringWithString:。其次,由于字符串是不可变的,因此编译器和运行时会进行优化。通常不可变对象将返回一个额外的引用计数,而不是创建一个实际的新对象。
-
可可之美——不需要时不复制数据...
-
糟糕,抱歉,这应该是一个副本(测试了几个不同的版本并粘贴了错误的版本)。不过,行为是相同的。
-
@JasonCoco 但它是对框架的“优化”,因为
NSString是一个“普通”类,而不是内置类型。
标签: iphone objective-c nsstring