如何在头文件(.h)中创建一个不可变的readonly属性,一个实现的可变读写属性(.m)

时间:2014-01-14 08:41:56

标签: ios iphone objective-c cocoa-touch cocoa

我有一个包含字典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,但我找不到任何有关差异的信息。可变性。

1 个答案:

答案 0 :(得分:7)

您的实现中需要一个单独的私有可变变量。您可以覆盖getter以返回不可变对象。

@interface MyObject () {
  NSMutableDictionary *_mutableJSONData;
}
@end

@implementation MyObject 

// ...

-(NSDictionary *)JSONData {
   return [NSDictionary dictionaryWithDictionary:_mutableJSONData];
}

// ...
@end

无需实现setter,因为它是readonly