在objc我看到这个代码:复制一个不可变的对象有什么意义?
- (void)setSubtitle:(NSAttributedString *)subtitle
{
self.subtitleLabel.attributedText = [subtitle copy];
}
它基本上是复制一个字符串,这是不可改变的。 有什么理由吗?这是一种优势还是浪费时间? 我不能问作者,因为他不在这里了。 我不明白这一点。
在objc我看到这个代码:复制一个不可变的对象有什么意义?
- (void)setSubtitle:(NSAttributedString *)subtitle
{
self.subtitleLabel.attributedText = [subtitle copy];
}
它基本上是复制一个字符串,这是不可改变的。 有什么理由吗?这是一种优势还是浪费时间? 我不能问作者,因为他不在这里了。 我不明白这一点。
使用copy
是因为某人实际上可以将一个可变的归因字符串传递给您的方法setSubtitle:
。使用copy
可确保您拥有属性字符串的不可变副本,以防原始可变版本被修改。
但在这种情况下,因为UILabel
的attributedText
属性被声明为copy
所以你确实有在你的代码copy
冗余呼叫是毫无意义的。
澄清:'NSMutableAttributedString'被声明为'NSAttributedString'的子类。因此,在任何你使用'NSAttributedString'的地方,你都可以获得子类。如果有人然后改变字符串,你的价值将改变在你的下面。所以惯例是复制传入的不可变对象,所以你不必担心随机改变的值。 – uliwitness
请注意,复制一个不可变对象实际上并不会复制任何东西;它返回相同的实例。 – bbum