NSString プロパティ: コピーするか保持するか? 質問する

NSString プロパティ: コピーするか保持するか? 質問する

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

@interface SomeClass : NSObject
{
    NSString* name;
}

@property (nonatomic, retain) NSString* name;

@end

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

  • 一般に文字列の場合、の代わりに 属性を使用するのが常に良い考えでしょうか?copyretain
  • 「コピーされた」プロパティは、「保持された」プロパティよりも効率が悪いのでしょうか?

ベストアンサー1

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

そうする理由は次の通りです:

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

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

[someName setString:@"Debajit"];

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

ほとんどの場合、オブジェクトの属性が背後で変更されるのを防ぐcopy必要があるため、それらを表すプロパティを としてマークする必要があります。( を使用する代わりに自分でセッターを作成する場合は、ではなく を@synthesize実際に使用することを忘れないでください。)copyretain

おすすめ記事