プロパティリストについて
プロパティリスト(property list)は、オブジェクトをシリアライズしておくためのファイルです。.plist という拡張子なので、plistファイルと呼ばれることがあります。
初期設定、アプリケーションの環境設定、状態保存などに利用されます。
ファイル形式
プロパティリストは、ASCII 形式(NEXTSTEP)/XML形式/バイナリ形式の三つファイル形式で保存されます。iOSでは、ASCII 形式で保存されることはありません(非推奨)。
● XML形式
XML形式は通常のテキストエディタで開くことができます。
● バイナリ形式
XMLは空間効率に問題があるため(タグでくくるので無駄が多い)、バイナリ形式が実装され、高速にかつコンパクトになりました。
タグとクラス
XMLフォーマットで使われるタグと、それに対応するFoundationのクラスが決まっています。
クラス名 | XMLタグ |
---|---|
NSString | <string> |
NSNumber | <real>, <integer>, <true />, <false /> |
NSDate | <date> |
NSData | <data> |
NSArray | <array> |
NSDictionary | <dict> |
dictの内容は以下のように決まっています。
<dict> <key>key</key> <string>value</string> </dict>
上記の形式に対応していないデータは、文字列かNSDataに変換することでプロパティリストに保存することができます。しかし、画像や音声、動画といった大きなデータの保存には適していません。パスワードといった、機密が求められるデータの保存も適していません。
アーカイブとNSCoding
任意のオブジェクトをシリアライズして保存したり、取り出して再利用したりしたいことはよくあることです。オブジェクトが壊れないように保存/復元できるようにする処理をアーカイブするといいます。オブジェクトをアーカイブしたりもとに戻したりするためにNSKeyedArchiverとNSKeyedUnarchiverが用意されています。アーカイバ/アンアーカイバは、オブジェクトを保存可能な形式に変換したり復元したりできるが、個々のオブジェクトがどのような保存・復元すべきデータを持っているかを知っている訳ではありません。どのデータを保存・復元するのかを知っているのは個々のオブジェクトなので、オブジェクトがそれらを指示する仕組みを実装していなければなりません。その仕組みが NSCodingプロトコルとよばれるものです。
NSCoding
NSCodingプロトコルは二つのメソッドからなります。これらを実装しておくことでアーカイブに対応できます。
- (void)encodeWithCoder:(NSCoder *)encoder - (id)initWithCoder:(NSCoder *)decoder
あるクラスが、NSCodingプロトコルに適合している事を宣言するには、以下のようにスーパークラスを指定した後にプロトコル名を記述します。
@interface MosaObject : NSObject <NSCoding>