NSString *myString = @"sample string";
NSString *newString = [myString copy];如果我在这两行之后设置断点,则myString的指针与newString的指针相同。
见鬼?NSString copy不是应该返回一个指向新对象的指针吗?或者我是否遗漏了一些关于复制工作原理的基本信息?
发布于 2010-03-26 14:41:55
因为NSString是,而不是可变的,所以它可能只是在内部增加ref count并使用它。
当您对其中一个NSStrings执行release操作时,它可能会减少ref count标准的内存管理。
你觉得这有什么问题吗?
发布于 2011-04-12 00:15:47
想想看:NSMutableString是NSString的子类。当您的属性被声明为NSString时,您不会期望它会发生变化。
考虑一下,如果你使用了retain,有人给了你一个NSMutableString,然后又改变了它,那么你的类就会崩溃。
然而,您可能会认为always copying很慢。所以NSString的copy只是简单地调用retain,NSMutableString的copy实际复制了一份。
通常,给spit out一个NSString *会更好,因为人们不需要一直复制它。
发布于 2014-12-13 05:25:18
您可以像示例中那样分配新的变量
NSString *anotherString = [[NSString alloc] initWithString:originalString];https://stackoverflow.com/questions/2521468
复制相似问题