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

cha*_*rit 0 objective-c

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

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

@implementation MYNugget
// automatic @synthesize
@end
Run Code Online (Sandbox Code Playgroud)

然后我想要将这个对象存储在另一个类中,使得它不可修改(也就是说,color通过一个- (void)freeze或多个东西使该属性只读.

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

Eik*_*iko 5

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

@interface MYNugget
@property (nonatomic, copy, readonly) NSString *color;
@end
Run Code Online (Sandbox Code Playgroud)

@interface MYMutableNugget : MYNugget
@property (nonatomic, copy, readwrite) NSString *color;
@end
Run Code Online (Sandbox Code Playgroud)

你的另一个类只会暴露一个MYNugget属性,理想情况下也是如此copy.这就是我们一直这样做NSString的方式.