dub*_*eat 4 memory-management copy objective-c nsstring retain
我在这里看到一些关于使用保留或复制字符串的问题的帖子.我仍然无法理解差异或重要性.
在我的情况下,我有一个类,有一大堆nsstrings来保持字符串.
我希望这个类只被实例化一次,我希望它的nsstring变量根据在表视图中单击的索引进行更改.
我是否正确地说,如果我选择使用保留,每次我在tableview点击上设置它们的值时我的nsstrings会被覆盖,如果我选择副本,我会以某种方式每个字符串有2个实例....?
对不起.....我完全不明白
这是一个关于复制可变对象与不可变对象的问题.由于NSString对象是不可变的(您无法更改其内容),因此它们实现-copy,如下所示:
- (id) copyWithZone: (NSZone *) zone
{
return [self retain];
}
Run Code Online (Sandbox Code Playgroud)
如果你考虑一下,没有理由复制一个不可变对象,因为那是浪费内存.另一方面,NSMutableString对象可以在其生命周期内看到它们的内容发生变化,因此如果您请求NSMutableString的副本,您将获得一个真正的副本,一个不同的对象.
如果您的字符串不是NSMutableStrings,则保留或复制它们无关紧要.但是,如果稍后重构代码以使用NSMutableStrings,则选择正确的方法很重要.一个共同的逻辑应该为你回答以下问题:如果我得到一个内容可能在外面改变的对象,我需要哪个值?通常你会想复制一份.
| 归档时间: |
|
| 查看次数: |
924 次 |
| 最近记录: |