NSColor和NSGradient作为属性 - 任何复制的理由?

时间:2008-11-05 00:18:51

标签: cocoa macos

我非常熟悉想要复制财产与保留的原因。 (基本上是值与关系的参数。例如,你几乎总是想要复制字符串。)

NSColor和NSGradient怎么样?

它们都符合NSCopying,但是目前实现的是不可变的。

思想?

2 个答案:

答案 0 :(得分:4)

不可变对象通常将copyWithZone:方法实现为return [self retain],因为如果数据永远不会改变,那么制作单独的数据副本毫无意义。但是,他们仍然需要实现该方法,以便与任何需要NSCopying一致性的东西兼容(例如NSDictionary密钥)。

至于使用方法,我会坚持使用与其他“价值”属性相同的使用模式,但您不会看到任何性能差异,因为无论如何他们可能会从retain调用copy 。这也包含了一些案例,例如添加了一个可变子类,它具有非常重要的NSCopying实现。

答案 1 :(得分:3)

分配给您的属性的NSColor和NSGradient的子类可能不是不可变的或引用透明的,因此您仍然应该使用相同的逻辑来确定保留vs副本,这对于任何通常使用可变子类的对象都是如此,即使在实践中,大多数时候都不太重要。

相关问题