我非常熟悉想要复制财产与保留的原因。 (基本上是值与关系的参数。例如,你几乎总是想要复制字符串。)
NSColor和NSGradient怎么样?
它们都符合NSCopying,但是目前实现的是不可变的。
思想?
答案 0 :(得分:4)
不可变对象通常将copyWithZone:
方法实现为return [self retain]
,因为如果数据永远不会改变,那么制作单独的数据副本毫无意义。但是,他们仍然需要实现该方法,以便与任何需要NSCopying一致性的东西兼容(例如NSDictionary密钥)。
至于使用方法,我会坚持使用与其他“价值”属性相同的使用模式,但您不会看到任何性能差异,因为无论如何他们可能会从retain
调用copy
。这也包含了一些案例,例如添加了一个可变子类,它具有非常重要的NSCopying实现。
答案 1 :(得分:3)
分配给您的属性的NSColor和NSGradient的子类可能不是不可变的或引用透明的,因此您仍然应该使用相同的逻辑来确定保留vs副本,这对于任何通常使用可变子类的对象都是如此,即使在实践中,大多数时候都不太重要。