2017-04-12 5 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

関連する問題