オブジェクトのアーカイブ
アーカイブは、アプリ内で保存されたり、アプリ間で転送することができる形式に関連するオブジェクトのグループへと変換するプロセスです。アーカイブの最終結果は、オブジェクトの ID のカプセル化された値、および他のオブジェクトとの関係を記録したバイトストリームのアーカイブです。逆のプロセスでアーカイブを解くのは、アーカイブを取得し、オブジェクトの同一のネットワークを再構成することです。
アーカイブの主な価値は、オブジェクトを永続化するための一般的な手法を提供することです。特殊なファイル形式でオブジェクトのデータを書く代わりに、アプリは頻繁にファイルとして、書き出すことができる、アーカイブに彼らのモデルオブジェクトを格納します。また、アプリは、オブジェクトのネットワークを転送することができ、一般的には オブジェクトグラフ として知られているが、アーカイブを使用して他のアプリに転送します。アプリは、多くの場合、コピー&ペーストのように、ペーストボード操作でこれを行います。
そのインスタンスがアーカイブに含まれるためには、クラスは NSCoding プロトコルを採用し、暗号化と復号化オブジェクトに必要なメソッドを実装する必要があります。Cocoa アーカイブは Objective-C オブジェクト、スカラー値、C 配列、構造体、および文字列を保持できます。カプセル化されたデータとともに、オブジェクトのタイプをアーカイブは保存し、バイトのストリームから復号したオブジェクトは、元々ストリームにエンコードされたオブジェクトと同じクラスの物です。
鍵付き連続アーカイバ
Foundation フレームワークは、オブジェクトのアーカイブとアンアーカイブネットワーク用のクラスの2つのセットを提供します。それらは、アーカイブとアンアーカイブのプロセスを初期化するためのメソッドを含み、オブジェクトのインスタンスデータをエンコードしデコードするためのメソッドを含んでいます。これらのクラスのオブジェクトは、時々 アーカイブ と アンーカイブ と言及されています。
- 鍵付きアーカイバとアンアーカイバ(NSKeyedArchiver と NSKeyedUnarchiver)。これらのオブジェクトは、暗号化され、復号されるデータの識別子として文字列の鍵を使用します。それらは、オブジェクトのアーカイブとアンアーカイブで好まれるオブジェクトで、特に新しいアプリで好まれます。
- 連続的なアーカイブとアンアーカイブ(NSArchiver と NSUnarchiver)。この"古いスタイル" のアーカイブは特定の順序でオブジェクトの状態を暗号化します。アンアーカイバは、同じ順序でオブジェクトの状態を復号化するように期待されます。その使用目的は、従来のコード用です。新しいアプリでは、代わりに鍵付きアーカイブを使用する必要があります。
鍵付きアーカイブの作成とデコード
NSKeyedArchiver のクラスメソッド、archiveRootObject:toFile: を起動してアプリケーションはアーカイブを作成します。このメソッドの最初のパラメータは、オブジェクトグラフのルートオブジェクトへの参照をとります。このルートオブジェクトから始めると、NSCoding プロトコルに準拠する、グラフ内の各オブジェクトは、アーカイブに自身を暗号化する機会が与えられます。結果のバイトストリームは、指定されたファイルに書き込まれます。
アーカイブを復号化するのは、反対方向へ進行する事です。アプリケーションは NSKeyedUnarchiver のクラスメソッド unarchiveObjectWithFile: を呼び出します。アーカイブファイルを与えられると、このメソッドは、バイトストリームに関連したデータを復号化し、オブジェクトを再作成するグラフの各オブジェクトのクラスを求め、オブジェクトグラフを再作成します。メソッドは、ルートオブジェクトへの参照を返すことで終了します。
NSKeyedArchiver クラスメソッドの archivedDataWithRootObject: と unarchiveObjectWithData: は上記のメソッドと同等であり、ファイルではなく、データオブジェクトを操作する以外は同等です。
前提条件の記事
関連記事
既出の議論
アーカイブとシリアル化プログラミングガイド
サンプルコードプロジェクト
Lister (for watchOS, iOS, and OS X)
次の章
前の章