2017-04-12 58 views
1

在objc我看到这个代码:复制一个不可变的对象有什么意义?

- (void)setSubtitle:(NSAttributedString *)subtitle 
{ 
    self.subtitleLabel.attributedText = [subtitle copy]; 
} 

它基本上是复制一个字符串,这是不可改变的。 有什么理由吗?这是一种优势还是浪费时间? 我不能问作者,因为他不在这里了。 我不明白这一点。

+1

请注意,复制一个不可变对象实际上并不会复制任何东西;它返回相同的实例。 – bbum

回答

6

使用copy是因为某人实际上可以将一个可变的归因字符串传递给您的方法setSubtitle:。使用copy可确保您拥有属性字符串的不可变副本,以防原始可变版本被修改。

但在这种情况下,因为UILabelattributedText属性被声明为copy所以你确实有在你的代码copy冗余呼叫是毫无意义的。

+0

澄清:'NSMutableAttributedString'被声明为'NSAttributedString'的子类。因此,在任何你使用'NSAttributedString'的地方,你都可以获得子类。如果有人然后改变字符串,你的价值将改变在你的下面。所以惯例是复制传入的不可变对象,所以你不必担心随机改变的值。 – uliwitness

相关问题