NSCopying 和 copyWithZone: - 它们应该返回 [self keep] 还是其他东西?

发布于 2024-12-05 13:22:51 字数 189 浏览 0 评论 0 原文

我很难理解 copyWithZone。

我知道它应该返回一个副本,但是如果我将一个对象添加到字典中,它会向字典中添加一个“copyWithZone”对象。如果我制作一个实际的副本(即一个新对象),那么添加到字典中的对象将不是同一个对象。但是,如果我只增加保留计数,那么它在技术上就不是副本。

我应该保留自己,还是制作一个实际的副本?

I'm having a hard time understanding copyWithZone.

I know it's supposed to return a copy, but if I add an object to a dictionary, it adds a 'copyWithZone' object to the dictionary. If I make an actual copy (that is, a new object), then the object added to the dictionary will not be the same object. However, if I only increase the retain count, then it's not technically a copy.

Should I just retain self, or make an actual copy?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

子栖 2024-12-12 13:22:51

copyWithZone: 应该返回一个不可变对象(如果该类有不可变和可变版本)。如果原始内容是不可变的,只需保留 &返回原始对象是安全的,因为没有一个所有者可以改变该对象。否则(即原始是可变的或不可变/可变二分法不适用),返回一个副本。

至于 NSDictionaryNSMutableDictionary,通常仅复制键(仅当您使用 -initWithDictionary:copyItems:),这是必要的,因为内部字典的数据结构取决于键值。如果您要更改字典使用的键,则会破坏字典的数据结构,并且您将无法再检索该键的项目,甚至更糟。

copyWithZone: is supposed to return an immutable object (if there are immutable and mutable versions of the class). If the original is immutable, simply retaining & returning the original would be safe, since none of the owners could mutate the object. Otherwise (i.e. original is mutable or the immutable/mutable dichotomy doesn't apply), return a copy.

As for NSDictionary and NSMutableDictionary, generally only the keys are copied (items are only copied if you explicitly say to with -initWithDictionary:copyItems:), which is necessary as the internal data structure of the dictionary depends on the key values. If you were to mutate a key being used by a dictionary, it would corrupt the dictionary's data structure and you would no longer be able to retrieve the item for that key, or worse.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文