プロパティが「読み取り専用」として定義され、さまざまなコンポーネント間で共有される「モデル」オブジェクトが多数あります。
場合によっては、オブジェクトのローカルで変更可能なコピーを作成する必要があります (それらをローカルで変更可能な状態に使用します)。
オブジェクトは作成後に不変でなければならないため、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