プロパティリスト(Property List)は永續化(シリアライズ)の爲の手段である。Windows ユーザでも iTunes ライブラリを展開したものは、ここを覗く人なら居るかも知れない。嚴密にはプログラミング言語ではないが、Cocoa ではあまりにも重要なので扱ふことにする。

*目次 [#n7a36dc7]
#contents
[[プログラミング言語/Objective-C]]

*永續化對稱クラス [#d1fee6bd]
-NSString
-NSNumber(シリアライザは int か float か bool かを區別する)
-NSDate
-NSData
-NSArray
-NSDictionary

以上の物とそのサブクラスが對稱となる。以外はプロパティリストとして保存できない。またコレクションクラス(配列と辭書)の場合は格納するオブジェクトもこの基準に沿はねばならない。

*NeXTstep形式プロパティリスト(OPENSTEP、ASCII形式) [#naf8ff10]
この形式の利點は人がみて讀みやすい所にある。ただし、古い形式であるため NSDate は NSStringとの區別がつかなくなる。

|クラス|値|記法|備考|h
|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に同じ|

** NSString のエスケープ [#e96d156b]
Unicode のバイナリ値がそのまま出力される。やうは UTF-16 で出力する。「あ」は2ビットコードであり「U+3042」である。これは「\U3042」と出力される。改行コードは LF は「\n」に置換されるが、CR はそのままである。タブは「\t」に変換され、ダブルクオートもまた「\"」となる。バックスラッシュは重ねることになる。嚴密には、2ビット以上のUnicodeであるとバイナリ値へエスケープされるらしい。
|文字|エスケープ|備考|h
|a|a|値が英數字及び「_」のみの時はダブルクオートが無く、また左記に同じ。ASCIIの他は次のやうになる|
|あ|\U3042|Unicode は U+3042|
|タブ|\t|----|
|改行(LF)|\n|----|
|改行・復歸(CR)|(そのまま)|----|
|ダブルクオート(")|\"|----|
|バックスラッシュ(\)|\\|----|

** コレクションの改行 [#rb2f8855]
コレクションはその文字數を一列に並べた時に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 の最後の項目にはコロンが無いのが標準だが、うつかり附けてもきつちり認識される。

** コメント [#gb9fcd51]
コメントは次の三つの形式を許可する。
-//
-#
-/*  */

お馴染みであらう。前者二項は改行、後者一項は「/*」で始まり「*/」で終はるまでがコメントと看做される。

** strings の爲の擴張 [#j89064cb]
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 などのコレクションをこれは要素として持つ事ができる。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS