低レベルでのNSCodingとNSCopyingの本当の違いは何ですか?
また、それらは独立して、一緒に使用されることになっていますか、それともいつ使用するのが良いですか?
低レベルでのNSCodingとNSCopyingの本当の違いは何ですか?
また、それらは独立して、一緒に使用されることになっていますか、それともいつ使用するのが良いですか?
NSCopyingは、他の言語で呼ばれるものに最も近いものですclone()
。つまり、既存のオブジェクトのカーボンコピーとして(機能的な)新しいオブジェクトをすぐに作成するために使用されます。
NSCodingは最も近いものserialize()/deserialize
です。つまり、オブジェクトを、後でプログラムを再起動したときに永続的に保存して復活させることができる形式に変換するために使用されます。
ご覧のとおり、機能はあまり似ておらず、独立して使用できるはずです。
どちらも問題のオブジェクトのコピーを作成しますが、それを行う方法は大きく異なります。
プロトコルは、実際には特定の機能セットを実装するための単なる約束です。NSCopyingの場合はそれであり-copyWithZone:
、NSCodingの場合はそれとです。–initWithCoder:
-encodeWithCoder:
NSCopyingは、オブジェクト(別の同一オブジェクト)のメモリ内コピーを作成するために使用されます。
NSCodingは、シリアル化された表現(NSDataオブジェクト)を作成するため、またはそのような表現からオブジェクトを作成するために使用されます。
NSCodingは、オブジェクトをディスクにシリアル化することです。
NSCopyingは、(メモリ内で)コピー可能であることを意味します。