我在这里看到了一些关于使用字符串保留或复制的问题的帖子。我仍然无法完全理解差异或重要性。
就我而言,目前我有一个类,其中包含大量 nsstrings 来保存字符串。
我希望这个类只被实例化一次,并且我希望它的 nsstring 变量根据在表视图中单击的索引而改变。
我是否正确地说,如果我选择使用保留,那么每次我在我的 tableview 单击上设置它们的值时,我的 nsstrings 都会被覆盖,如果我选择复制,我会以某种方式有每个字符串的 2 个实例......?
对不起……我完全不明白
我在这里看到了一些关于使用字符串保留或复制的问题的帖子。我仍然无法完全理解差异或重要性。
就我而言,目前我有一个类,其中包含大量 nsstrings 来保存字符串。
我希望这个类只被实例化一次,并且我希望它的 nsstring 变量根据在表视图中单击的索引而改变。
我是否正确地说,如果我选择使用保留,那么每次我在我的 tableview 单击上设置它们的值时,我的 nsstrings 都会被覆盖,如果我选择复制,我会以某种方式有每个字符串的 2 个实例......?
对不起……我完全不明白
这是一个关于复制可变对象与不可变对象的问题。由于 NSString 对象是不可变的(您不能更改它们的内容),它们实现 -copy 如下:
- (id) copyWithZone: (NSZone *) zone
{
return [self retain];
}
如果您考虑一下,没有理由复制不可变对象,因为这会浪费内存。另一方面,NSMutableString 对象可以看到它们的内容在其生命周期内发生变化,因此如果您请求 NSMutableString 的副本,您将获得一个真实的副本,一个不同的对象。
如果您的字符串不是 NSMutableStrings,则保留或复制它们都没有关系。但是,如果您稍后重构代码以使用 NSMutableStrings,那么选择正确的方法很重要。一个常见的逻辑应该为您回答以下问题:如果我得到一个内容可能在外部发生变化的对象,我需要哪个值?很多时候你会想要复制。