0

次のような単純な DTO クラスがあるとします。

@interface MYNugget
@property (nonatomic, copy) NSString *color;
@end

@implementation MYNugget
// automatic @synthesize
@end

そして後で、このオブジェクトを変更できないように別のクラスに格納したいと考えています (つまり、aまたは何かcolorを介してプロパティを読み取り専用にします)。- (void)freeze

独自のセッターを作成することで、これを達成するための最良の方法は何ですか?

4

2 に答える 2

5

標準的な方法は、1つの可変クラスと不変クラスのクラスを作成することです。

@interface MYNugget
@property (nonatomic, copy, readonly) NSString *color;
@end

@interface MYMutableNugget : MYNugget
@property (nonatomic, copy, readwrite) NSString *color;
@end

他のクラスは、MYNuggetプロパティを公開するだけで、理想的には再びとして公開しますcopy。それが私たちがNSStringいつもそうしている方法です。

于 2012-10-18T08:57:36.507 に答える
0

私がすることは、コンストラクターのみを介して色を設定することです:

@interface MYNugget
@property (nonatomic, copy, readonly) NSString *color;

- (id) initWithColor:(NSString *)color;

@end

@implementation MYNugget

@synthesize color = _color;

- (id) initWithColor:(NSString *)color {
   self = [super init];

   if (self) {
     _color = [color copy];
   }

   return self;
}

@end
于 2012-10-18T08:58:29.280 に答える