属性列表

在OS X的Cocoa，NeXTSTEP和GNUstep编程框架中，属性列表（Property List）文件是一种用来存储序列化后的对象的文件。属性列表文件的文件扩展名为.plist，因此通常被称为plist文件。

Plist文件通常用于储存用户设置，也可以用于存储捆绑的信息，该功能在旧式的Mac OS中是由资源分支提供的。

 表达 
由于Plist中存储的数据是抽象的，其采用的文件格式可以不止一种。NeXTSTEP只使用一种格式，而稍晚的GNUstep和OS X框架导入了不同的文件格式。

 NeXTSTEP 
NeXTSTEP系统中，Plist被设计为人类可读的，并可以手工修改，故采用了类似于编程语言的语法将数据序列化为ASCII数据。

字符串被表示为：
 "This is a plist string"
二进制数据被表示为：
 < [文本形式的十六进制数] >
数组被表示为：
 ( "1", "2", "3" )
字典则被表示为：
 {
     "键" = "值";
     ...
 }

NeXT的plist格式的一个限制是它不能表示NSValue对象（即数，布尔值等）。

 GNUstep 
GNUstep采用了NeXTSTEP的格式，并添加了少许特性。它支持NSValue对象（以普通ASCII码表示），支持NSDate（序列化成<*DYYYY-MM-DD HH:MM:SS timezone>的格式）。

GNUstep也可以读写OS X使用的Plist格式。

 Mac OS X 
Mac OS X在支持读取NeXTSTEP格式的同时，并不鼓励使用它，而是推荐使用Apple导入的两种新格式。

Mac OS X 10.0中，NeXTSTEP的格式被认为是不被推荐的，并导入了一种新的XML格式，其由Apple定义的公开DTD所规范化。XML格式支持非ASCII格式，亦可存储NSValue对象。但与GNUstep的ASCII plist格式不同，Apple的NeXTSTEP格式的plist文件不支持这两种特性。

由于XML文件在储存时不是最有空间效率的，Mac OS X 10.2导入了一种新的格式，它将plist文件存储为二进制文件。从Mac OS X 10.4开始，这是偏好设置文件的默认格式。

 plutil工具（在Mac OS X 10.2中导入）可以用来检查plist的语法，或者对plist文件进行格式转换。

可以使用任何文本编辑器对XML格式的plist进行更改，同时，Apple提供了“Property List Editor”应用程序（作为Apple Developer Tools的一部分安装），它是一个树状的查看器与编辑器，并可以处理二进制格式的plist。

对于XML格式，XML标签和相关Foundation类、Core Foundation类型、数据储存格式的关系如下表所示：
Foundation类Core Foundation类型XML标签储存格式 NSString CFString <string> UTF-8编码的字符串 NSNumber CFNumber <real>, <integer> 十进制数字符串 NSNumber CFBoolean <true />, or <false /> 无数据（只有标签） NSDate CFDate <date> ISO 8601格式的日期字符串 NSData CFData <data> Base64编码的数据 NSArray CFArray <array> 可以包含任意数量的子元素 NSDictionary CFDictionary <dict> 交替包含<key>标签和plist元素标签

defaults工具可以用于以命令行形式，通过程序的偏好设置域，管理用于储存偏好设置的plist文件；而Property List Editor则可以用于编辑任何plist文件（包括用于储存偏好设置的）。从Mac OS X 10.4开始，Apple提供了通过System Events应用程序读写plist文件的AppleScript接口，而从Mac OS X 10.5开始，Apple也提供了用于编辑，创建和写入plist文件的接口。

参考文献

参见
 数据序列化格式对比

外部链接
 The plist manual page at developer.apple.com
 Property List Programming Guide for Cocoa
 Property List Programming Topics for Core Foundation
 NSPropertyListSerialization class documentation from the GNUstep project
 OpenStep plist API from Sun Microsystems
 Apache Commons Configuration  Configuration API in Java supporting the Property List format
 Apple's Property List Document Type Definition 
 BinaryPListParser.java from Quaqua project, which is listed as using a variant of the BSD licenses.

 第三方编辑工具 
 PlistEdit, a general property list editor
 PlistEdit Pro , a general property list editor
 PrefEdit , specializing in editing preference plists
 Property List Tools, an Applescript scripting addition for manipulating plists
 Pledit, a general property list editor for Microsoft Windows

Category:MacOS
Category:数据序列化格式
Category:NeXT