在Obj-C中创建只读版本的POCO对象?

时间:2012-10-18 08:51:08

标签: objective-c

假设我有一个像这样的简单DTO类:

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

@implementation MYNugget
// automatic @synthesize
@end

然后我想要将此对象存储在 另一个类 中,使其不可修改(即,使color属性只能通过- (void)freeze或其他东西。

完成编写自己的二传手的最佳方法是什么?

2 个答案:

答案 0 :(得分:5)

标准方法是必须使用类,一个是可变的,一个是不可变的。

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

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

您的其他课程只会公开MYNugget属性,理想情况下会再次显示为copy。这就是我们一直使用NSString的方式。

答案 1 :(得分: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