@interface SomeClass : NSObject
@property (copy, nonatomic) NSString *usefulString;
@property (strong, nonatomic) NSString *dangerousString;
@property (copy, nonatomic) NSURL *curiousURLOne;
@property (strong, nonatomic) NSURL *curiousURLTwo;
@end
上記のクラスでは、 は から継承されてdangerousString
いるため、悪い考えと見なされます。つまり、クラスのユーザーが変更可能な文字列を に設定し、後で変更可能な文字列の値を のインスタンスの下から変更する可能性があります。このプロパティは、値を新しい (不変の) 文字列オブジェクトにコピーするため、この危険はありません。NSMutableString
NSString
dangerousString
SomeClass
usefulString
ただし、 for NSURL
(および可変の対応するものを持たない他の基本クラス - などNSNumber
) のように見えますが、プロパティ宣言のコピー セマンティックは不要です。NSURL
NSCopyingに準拠していcopyWithZone:
ます(...しかし、保持カウントが増加した同じオブジェクトを返すだけではないのではないかと考えなければなりません-なぜ他のことをするのでしょうか?)
copy
変異の危険性がないのに、なぜプロパティを宣言するのでしょうか?