我非常熟悉为什么想要复制一个属性而不是保留。(本质上是值与关系参数。例如,您几乎总是希望复制字符串。)
那NSColor和NSGradient呢?
它们都符合NSCopying,但目前的实现是不可变的。
有什么想法?
发布于 2008-11-05 00:29:32
不可变对象通常会将其copyWithZone:方法实现为return [self retain],因为如果数据永远不会更改,那么创建单独的数据副本就没有意义了。但是,他们仍然需要实现该方法,以便与任何期望NSCopying一致性的东西(例如,NSDictionary键)兼容。
至于用法,我将坚持使用与其他“值”属性相同的用法模式,您将看不到任何性能差异,因为它们可能无论如何都会从copy调用retain。这也涵盖了一些情况,比如添加了一个具有非平凡NSCopying实现的可变子类。
发布于 2008-11-05 00:25:23
分配给您的属性的NSColor和NSGradient的子类可能不是不可变的或参照透明的,因此您仍然应该使用相同的逻辑来确定retain与copy,即使在大多数情况下,这在实践中不太可能是重要的。
https://stackoverflow.com/questions/263977
复制相似问题