copyWithZone を理解するのに苦労しています。
コピーを返すことになっていることはわかっていますが、オブジェクトを辞書に追加すると、「copyWithZone」オブジェクトが辞書に追加されます。実際のコピー (つまり、新しいオブジェクト) を作成すると、辞書に追加されたオブジェクトは同じオブジェクトにはなりません。ただし、保持カウントを増やすだけでは、技術的にはコピーではありません。
自分自身を保持するか、実際のコピーを作成する必要がありますか?
copyWithZone を理解するのに苦労しています。
コピーを返すことになっていることはわかっていますが、オブジェクトを辞書に追加すると、「copyWithZone」オブジェクトが辞書に追加されます。実際のコピー (つまり、新しいオブジェクト) を作成すると、辞書に追加されたオブジェクトは同じオブジェクトにはなりません。ただし、保持カウントを増やすだけでは、技術的にはコピーではありません。
自分自身を保持するか、実際のコピーを作成する必要がありますか?
copyWithZone:
不変オブジェクトを返すことになっています (クラスの不変バージョンと可変バージョンがある場合)。オリジナルが不変の場合、所有者の誰もオブジェクトを変更できないため、オリジナルを保持して返すだけで安全です。それ以外の場合 (つまり、オリジナルが可変であるか、不変/可変の二分法が適用されない場合)、コピーを返します。
NSDictionary
とについてNSMutableDictionary
は、通常、キーのみがコピーされます (アイテムは、 で明示的に指定した場合にのみコピーされます-initWithDictionary:copyItems:
)。これは、辞書の内部データ構造がキーの値に依存するために必要です。ディクショナリで使用されているキーを変更すると、ディクショナリのデータ構造が破損し、そのキーのアイテムを取得できなくなるか、さらに悪化します。