1. ホーム
  2. オブジェクティブC

[解決済み] [Solved] NSString property: copy or retain?

2022-04-14 22:23:42

質問

というクラスがあるとします。 SomeClass を持つ string プロパティ名です。

@interface SomeClass : NSObject
{
    NSString* name;
}

@property (nonatomic, retain) NSString* name;

@end

名前が割り当てられることがあると理解しています。 NSMutableString この場合、誤った動作につながる可能性があります。

  • 文字列全般について 常に を使うのは良いアイデアです。 copy 属性の代わりに retain ?
  • コピーされたプロパティは、保持されたプロパティよりも効率が悪いのでしょうか?

どのように解決するのですか?

に準拠した不変の値クラスを型とする属性の場合、その型は NSCopying プロトコルを使用する場合、ほとんどの場合 copy の中で @property の宣言があります。 指定する retain は、このような状況ではほとんど必要ないものです。

なぜそうしたいのか、その理由を説明します。

NSMutableString *someName = [NSMutableString stringWithString:@"Chris"];

Person *p = [[[Person alloc] init] autorelease];
p.name = someName;

[someName setString:@"Debajit"];

の現在の値は Person.name プロパティが宣言されているかどうかによって異なります。 retain または copy - になります。 @"Debajit" と表示された場合、そのプロパティは retain しかし @"Chris" と表示された場合、そのプロパティは copy .

ほとんどの場合 防止する オブジェクトの属性を背後で変更する場合は、その属性を表すプロパティに copy . (そして、もしあなたが @synthesize を実際に使用することを忘れないでください。 copy ではなく retain を入れました)。