2010-02-19 156 views
4

我在这里看到了一些关于使用保留或复制字符串的问题。我仍然无法理解差异或重要性。NSString保留副本问题

在我的情况下,目前我有一个类的整个负载nsstrings来保存字符串。

我希望这个类只能实例化一次,我希望它的nsstring变量根据在表视图中单击的索引进行更改。

如果我选择使用保留,我的nsstrings将被覆盖每次我在我的tableview点击设置它们的值,如果我选择复制,我会以某种方式有每个字符串2个实例.. ..?

对不起.....我完全不明白这一点

回答

6

这是一个有关复制可变对象与一成不变的人的问题。由于NSString对象是不可变的(你不能改变它们的内容),它们实现-copy这样的:

- (id) copyWithZone: (NSZone *) zone 
{ 
    return [self retain]; 
} 

如果你想想看,没有理由复制不可变对象,因为那是浪费内存。另一方面,NSMutableString对象可以在它们的生命周期中看到它们的内容发生了变化,所以如果你请求一个NSMutableString的副本,你会得到一个真正的副本,一个不同的对象。

如果您的字符串不是NSMutableStrings,则保留或复制它们并不重要。但是,如果稍后重构代码以使用NSMutableStrings,则选择正确的方法非常重要。一个共同的逻辑应该为你回答以下问题:如果我得到一个内容可能在外面改变的对象,我需要哪个值?更多的时候你会想要复制一份。

+0

谢谢您的澄清!我不知道'[NSString copy]'会保留。 – MrMage 2010-02-19 10:14:00