プロパティリスト(Property List)は永續化(シリアライズ)の爲の手段である。Windows ユーザでも iTunes ライブラリを展開したものは、ここを覗く人なら居るかも知れない。嚴密にはプログラミング言語ではないが、Cocoa ではあまりにも重要なので扱ふことにする。
以上の物とそのサブクラスが對稱となる。以外はプロパティリストとして保存できない。またコレクションクラス(配列と辭書)の場合は格納するオブジェクトもこの基準に沿はねばならない。
この形式の利點は人がみて讀みやすい所にある。ただし、古い形式であるため NSDate は NSStringとの區別がつかなくなる。
クラス | 値 | 記法 | 備考 |
NSString | string | "string" | 値が英數字及び「_」のみの時はダブルクオート無し。一部エスケープされる |
NSNumber | YES(bool) | 1 | ---- |
NSNumber | NO(bool) | 0 | ---- |
NSNumber | 20(int) | 20 | ---- |
NSNumber | 2.0(float) | 2.0 | ---- |
NSDate | @referencetime | "YYYY-MM-DD HH:mm:ss ±XXXX" | ISO に基づくが、これは恐らく description の値 |
NSData | 0xAD238FE8321..... | <10101101 00100011 0011.....> | バイナリは二進數に變換され、8bit=1byte ごとに半角スペースが入る |
NSArray | [obj,obj,.....,obj] | (<obj>, <obj>, ...., <obj>) | <obj>の記法は各々のクラス依存 |
NSDictionary | [key=>obj,key=>obj] | {<key>=<obj>; <key>=<obj>; } | <obj>の記法は各々のクラス依存で、<key>はNSStringに同じ |
Unicode のバイナリ値がそのまま出力される。やうは UTF-16 で出力する。「あ」は2ビットコードであり「U+3042」である。これは「\U3042」と出力される。改行コードは LF は「\n」に置換されるが、CR はそのままである。タブは「\t」に変換され、ダブルクオートもまた「\"」となる。バックスラッシュは重ねることになる。嚴密には、2ビット以上のUnicodeであるとバイナリ値へエスケープされるらしい。
文字 | エスケープ | 備考 |
a | a | 値が英數字及び「_」のみの時はダブルクオートが無く、また左記に同じ。ASCIIの他は次のやうになる |
あ | \U3042 | Unicode は U+3042 |
タブ | \t | ---- |
改行(LF) | \n | ---- |
改行・復歸(CR) | (そのまま) | ---- |
ダブルクオート(") | \" | ---- |
バックスラッシュ(\) | \\ | ---- |
コレクションはその文字數を一列に並べた時に78バイトを超過すれば、アイテムごとに改行することになる。
{ "Application Version" = "8.0.1"; Features = 5; "Library Persistent ID" = XXXXXXXXXXXXXXXX; "Major Version" = 1; "Minor Version" = 1; "Music Folder" = "/Users/XXX/Music/iTunes/iTunes%20Music/"; Playlists = ( { ..... }, ....... ); }
セミコロン(;)及びコロン(,)は必ず半角スペースを一つ後置する。これはダブルクオートで括らない場合への對處。コレクションの要素がこれらで區切られぬ場合、パーサはエラーを發する。なほ NSArray の最後の項目にはコロンが無いのが標準だが、うつかり附けてもきつちり認識される。
コメントは次の三つの形式を許可する。
お馴染みであらう。前者二項は改行、後者一項は「/*」で始まり「*/」で終はるまでがコメントと看做される。
strings は Localized.strings などで使用される UTF-16 でエンコーディングされた書類である。これのためにパーサは NSDictionary がルートである時に限り、ルート要素の NSDictionary には鍵括弧を必要としない。
よつて先程示した ASCII の plist は次のやうでも同樣に解釋されることになる。
"Application Version" = "8.0.1"; Features = 5; "Library Persistent ID" = XXXXXXXXXXXXXXXX; "Major Version" = 1; "Minor Version" = 1; "Music Folder" = "/Users/XXX/Music/iTunes/iTunes%20Music/"; Playlists = ( { ..... }, /* これは註釋 */ ....... ); # これも註釋 // これもさうである
Localized.strings では普通使はないけれど、他の NSArray などのコレクションをこれは要素として持つ事ができる。