我有许多“模型”对象,其属性被定义为“只读”并在各种组件之间共享。
在某些情况下,我需要创建对象的本地可变副本(将它们用于本地可变状态)
我宁愿不实现 NSMutableCopy 协议,因为对象在创建后应该是不可变的。修改后的对象可以在复制+变异操作之后“传递”。
是否有建议的机制,或者我应该只实现一个接收“更改”参数的构造函数?
例如,将 JSON 解析为原生类型的对象:
@interface ImmutableObject : NSObject
// various "readonly" properties
...
-(instancetype)initWithJSON:(NSDictionary *)jsonDictionary;
@property (nonatomic, readonly) MyClass1 *prop1;
@property (nonatomic, readonly) MyClass2 *prop2;
...
@property (nonatomic, readonly) NSArray<MyClass100 *> *prop100;
@end
@implementation
-(instancetype)initWithJSON:(NSDictionary *)jsonDictionary {
self = [super init];
[self parseDictionaryToNative:jsonDictionary];
return self;
}
@end
代码中的某处:
ImmutableObject *mutated = [immutableObject mutableCopy]; // best way to accomplish this?
// change some values...
mutated.prop1 = ... // change the value to something new
self.state = [mutated copy]; // save the new object