私はそれについていくつかの話題を読みましたが、それでも私は迷っています。正しくmutableCopyWithZoneとcopyWithZoneを実装する方法
2種類のオブジェクトを作成したいのですが、1つは "読み取り専用"プロパティのみで不変で、もう1つは "readwrite"プロパティで変更可能です。
EXCarとEXMutableCarを呼び出すことができます。
EXCarはNSObjectのサブクラスであり、EXMutableCarはEXCarのサブクラスです。
ExCarは、そのインターフェイスに
@property (nonatomic, strong, readonly) NSString *name;
を持つことになりますEXMutableCarは、私はそのsubclasse EXMutableCarを使用するときに、私はEXCarのプロパティ "を開き、"
@property (nonatomic, strong) NSString *name;
そのインターフェースになります。そして、それは変更可能です。 問題はそれらの間で適切にコピーすることです。
私はEXCarでmutableCopyWithZoneを実装:
- (id)mutableCopyWithZone:(NSZone *)zone {
EXMutableCar *mutableCopy = [[EXMutableCar allocWithZone:zone] init];
mutableCopy.name = _name;
return mutableCopy;
}
最初の質問を、それはそれを行うには良い方法ですか? (私は嚥下コピーしたい)
問題はcopyWithZoneです。 EXCarのプロパティは読み取り専用私はEXCarで、どちらもEXMutableCarでもないEXCarの新しいインスタンスを作成し、このようにそのプロパティを埋めることはできませんされているので :
- (id)copyWithZone:(NSZone *)zone {
EXCar *copy = [[EXCar allocWithZone:zone] init];
copy.name = _name; // This can't work...
return copy;
}
を私は本当に「INIT」を行うにはしたくありませんメソッドを渡す15のプロパティ(確かに、EXCarは一例です。実際のクラスは多くのプロパティでいっぱいです)。通常はサーバーからのJSONメッセージから開始されるため、複雑なinitメソッドは必要ありません。
第2の質問は、私のクラスを不変に保つcopyWithZoneを行う方法ですか?あなたの助けのための
感謝:)
コピーは、例えば、不変のバージョンを返さなければなりませんEXCarではなくEXCar。これは、クラスがいくつかの変更可能な値(変更可能なサブクラス内)に依存している場合にクラスがカスタム等価を実装する場合に特に重要です。そのため、たとえばNSDictionaryはキーをコピーします。 –