プロパティ(特性)リスト
プロパティリストは、ファイルシステムに格納され、後で再構成できるオブジェクトの階層の表現です。プロパティリストは、アプリに、少量のデータを格納するための軽量でポータブルな方法を与えます。それらは、オブジェクトの特定の型から作ったデータの階層であり、これらは、実際には、オブジェクトグラフです。プロパティリストは、プログラム的に作成が容易であり、永続的な表現にシリアル化するのはさらに簡単です。アプリは、メモリに保存された静的な表現を後で読み、オブジェクトのオリジナルのの階層を再作成できます。ココア・ファウンデーションと Core Foundation の両方ともがプロパティリストのシリアル化と逆シリアル化に関連する API を持っています。
プロパティリストの型とオブジェクト
プロパティリストは、特定の種類のデータだけで構成され、辞書、配列、文字列、数値(整数および浮動小数点)、日付、2進数、およびブール値から成ります。辞書と配列は、コレクションであるため、特殊なタイプです。それらは、他の辞書や配列を含む、1つ以上のデータ型を含みます。このオブジェクトの階層的なネストはオブジェクトのグラフを作成します。抽象データ型は、それぞれ、Foundation のクラス、Core Foundation の型およびコレクションオブジェクトと値オブジェクトの XML 要素に対応しており、以下のリストに示しました。
抽象型 | Foundation フレームワークのクラス | Core Foundation のタイプ | XML の要素 |
---|---|---|---|
配列 | NSArray | CFArrayRef | <array> |
辞書 | NSDictionary | CFDictionaryRef | <dict> |
文字列 | NSString | CFStringRef | <string> |
データ | NSData | CFDataRef | <data> |
日付 | NSDate | CFDateRef | <date> |
整数 | NSNumber(intValue 32ビット) NSNumber(integerValue 64ビット) | CFNumberRef(kCFNumberSInt32Type) CFNumberRef(kCFNumberSInt64Type) | <integer> |
浮動小数点値 | NSNumber(floatValue 32ビット) NSNumber(doubleValue 64ビット) | CFNumberRef(kCFNumberFloat32Type) CFNumberRef(kCFNumberFloat64Type) | <real> |
ブール値 | NSNumber(boolValue) | CFBooleanRef | <true/> または<false/> |
ファウンデーション·クラスの変更可能なバージョンもサポートされています。 |
集合的に、これらのクラスのインスタンスは、プロパティリストオブジェクト として知られています。例えば、NSMutableDictionary オブジェクトは、プロパティリストオブジェクトですが、NSNumber オブジェクト、NSString オブジェクト、などなどです。プロパティリストが有効であるためには、オブジェクト・グラフ内のすべてのオブジェクトは、プロパティリスト・オブジェクトでなければなりません。
プロパティリストのベストプラクティス
XML とバイナリ形式の両方でプロパティリストを書き出すことができます。バイナリ形式は、XMLバージョンよりにはるかにコンパクトで、したがって、より効率的です。それは、ほとんどの場合お勧めです。しかし、必要がある場合は、手動で XML プロパティリストを編集できます。プロパティリストファイルは、plist のファイル名の拡張子を持っています。
オブジェクトが、可変性の設定を持っている場合は特に、沢山の、複雑なグラフを格納するプロパティリストを使用するべきではありません。そして、モデルオブジェクトのようなアーキテクチャでサポートされていないオブジェクトを格納するプロパティリストを使用することはできません。このような場合には、代わりにアーカイブを使用します。プロパティリストは NSData のオブジェクトを含めることができますが、大量のバイナリデータを保持するプロパティリストのデータオブジェクトを使用しない方がいいでしょう。
プロパティリストのシリアライズ
プロパティリストのシリアル化と逆シリアル化は、NSPropertyListSerialization クラスの適切なクラスメソッドを呼び出すか、Core Foundation を使っている場合は、CFPropertyListRef 不透明タイプに関連する機能を使用してください。ココアでは、シリアル化された出力は NSData オブジェクトの形式です。このため、例えば、そのクラス(例えば、writeToFile:atomically:)のメソッドを使用して、ファイルシステムにそのデータを書き込み、メモリにそれを読み戻すために適切な NSData クラスファクトリメモリを使用して下さい。それから、それを逆シリアル化するとき、プロパティリストに可変性のオプションを指定できます。
前提条件の記事
関連記事
既出の議論
プロパティリストプログラミングガイド
サンプルコードプロジェクト
People
次の章
前の章