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

我有一个持有字典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 

有什么我可以做的强制我要去的抽象types? 我查看了其他的问题,虽然我已经知道如何从.h readwrite属性,并从.m ,但我无法find关于可变性差异的任何信息。

你需要一个单独的私有可变variables在你的实现。 你可以重写getter来返回一个不可变的对象。

 @interface MyObject () { NSMutableDictionary *_mutableJSONData; } @end @implementation MyObject // ... -(NSDictionary *)JSONData { return [NSDictionary dictionaryWithDictionary:_mutableJSONData]; } // ... @end 

不需要执行setter,因为它是readonly