gpt4 book ai didi

objective-c - NSString 保留复制问题

转载 作者:太空狗 更新时间:2023-10-30 04:02:56 25 4
gpt4 key购买 nike

我在这里看到了一些关于对字符串使用保留或复制的问题的帖子。我仍然不太明白其中的区别或重要性。

在我的例子中,目前我有一个包含大量 nsstrings 的类来保存字符串。

我希望这个类只被实例化一次,我希望它的 nsstring 变量根据在 TableView 中单击的索引而改变。

如果我选择使用保留,每次我在我的 tableview 上设置它们的值时,我的 nsstrings 都会被覆盖,如果我选择复制,我会以某种方式每个字符串有 2 个实例,我这样说是否正确... .?

对不起.....我完全不明白

最佳答案

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

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

如果您考虑一下,没有理由复制一个不可变对象(immutable对象),因为那是一种内存浪费。另一方面,NSMutableString 对象可以在其生命周期中看到其内容发生变化,因此如果您请求 NSMutableString 的副本,您将获得一个真正的副本,一个不同的对象。

如果你的字符串不是 NSMutableStrings,你是保留还是复制它们都没有关系。但是,如果您稍后重构代码以使用 NSMutableStrings,那么选择正确的方法很重要。一个常见的逻辑应该能为你回答以下问题:如果我得到一个对象,其内容可能在外部发生变化,我需要哪个值?通常情况下,您会想要复制一份。

关于objective-c - NSString 保留复制问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2295302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com