假设我有一个像这样的简单 DTO 类:
@interface MYNugget
@property (nonatomic, copy) NSString *color;
@end
@implementation MYNugget
// automatic @synthesize
@end
然后我想以一种不可修改的方式将该对象存储在另一个类中(也就是说,通过 a或其他东西使color
属性只读。- (void)freeze
除了编写我自己的二传手之外,最好的方法是什么?
假设我有一个像这样的简单 DTO 类:
@interface MYNugget
@property (nonatomic, copy) NSString *color;
@end
@implementation MYNugget
// automatic @synthesize
@end
然后我想以一种不可修改的方式将该对象存储在另一个类中(也就是说,通过 a或其他东西使color
属性只读。- (void)freeze
除了编写我自己的二传手之外,最好的方法是什么?
标准的方法是拥有类,一个可变的和一个不可变的。
@interface MYNugget
@property (nonatomic, copy, readonly) NSString *color;
@end
和
@interface MYMutableNugget : MYNugget
@property (nonatomic, copy, readwrite) NSString *color;
@end
您的其他类只会公开一个MYNugget
属性,理想情况下又是copy
. 这就是我们一直这样做NSString
的方式。
我要做的只是通过构造函数设置颜色:
@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