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

我有一个包含字典JSONData的对象.从头文件,以及将访问它的其他类,我希望此属性只是只读和不可变.

@interface MyObject : NSObject

@property (readonly, strong, nonatomic) NSDictionary *JSONData;

@end

但是,我需要它从实现文件中读取和可变,像这样,但这不起作用:

@interface MyObject ()

@property (readwrite, strong, nonatomic) NSMutableDictionary *JSONData;

@end

@implementation MyObject

// Do read/write stuff here.

@end

我有什么办法可以强制执行我想要的那种抽象吗?我查看了其他问题,虽然我已经知道如何从.h读取属性并从.m读取,但我找不到任何关于可变性差异的信息.

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

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

@implementation MyObject 

// ...

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

// ...
@end

不需要实现setter,因为它只是readonly.

转载注明原文:ios – 如何在头文件(.h)中创建一个不可变的只读属性,一个实现的可变读写属性(.m) - 代码日志