gpt4 book ai didi

cocoa - 使用 NSCopying 复制私有(private)实例变量的最佳实践

转载 作者:行者123 更新时间:2023-12-03 16:04:38 25 4
gpt4 key购买 nike

我可能在这里遗漏了一些明显的东西,但我正在我的一个对象上实现 NSCopying。该对象具有不通过 getter 公开的私有(private)实例变量,因为它们不应该在对象外部使用。

在我的 copyWithZone: 实现中,我需要分配/初始化新实例,而且还设置其状态以匹配当前实例。显然,我可以从 copyWithZone: 内部访问当前私有(private)状态,但无法将其设置到新对象中,因为没有该状态的访问器。

是否有一种标准方法可以解决这个问题,同时仍然保持数据隐私完整?

谢谢。

最佳答案

首先,你应该始终有 setter/getter ,即使它们是私有(private)的。你的对象应该只使用访问器访问它自己的ivars(极少数情况除外)。这将为您省去很多内存管理的麻烦。

其次,Alex 建议使用 -> 是一种标准方法,尽管这违反了上面的 getter 规则。该规则有少数异常(exception)情况,复制就是其中之一。在这里使用私有(private) setter 仍然是合理的(我以前专门这样做),但由于各种原因,我发现使用 -> 通常会更干净。

要非常小心地确保内存管理正确。如果您需要调用 [super copyWithZone:],那么您还应该了解 NSCopyObject() 的复杂性以及即使您不使用它也会对您产生怎样的影响你自己吧。我在 "NSCopyObject() considered harmful." 中详细讨论了这一点

关于cocoa - 使用 NSCopying 复制私有(private)实例变量的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2567385/

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