我有一个包含字典JSONData
的对象。从头文件,以及将访问它的其他类,我希望此属性只能是只读和不可变的。
@interface MyObject : NSObject
@property (readonly, strong, nonatomic) NSDictionary *JSONData;
@end
但是,我需要它readwrite
并且可以从实现文件中变化,就像这样,但是这不起作用:
@interface MyObject ()
@property (readwrite, strong, nonatomic) NSMutableDictionary *JSONData;
@end
@implementation MyObject
// Do read/write stuff here.
@end
我能做些什么来强制执行我想要的那种抽象吗?我查看了其他问题,虽然我已经知道如何从readonly
和.h
readwrite
创建一个属性.m
,但我找不到任何有关差异的信息。可变性。
答案 0 :(得分:7)
您的实现中需要一个单独的私有可变变量。您可以覆盖getter以返回不可变对象。
@interface MyObject () {
NSMutableDictionary *_mutableJSONData;
}
@end
@implementation MyObject
// ...
-(NSDictionary *)JSONData {
return [NSDictionary dictionaryWithDictionary:_mutableJSONData];
}
// ...
@end
无需实现setter,因为它是readonly
。