iOS框架--属性列表(PropertyList)

plist是什么?

属性列表是一种结构化数据表示,简称做“plist”,它在Cocoa和CoreFoundation中使用,并作为一种便利方式来存储、组织和访问标准数据类型。

属性列表被广泛应用在OS X 和 iOS的程序中,比如,OS X Finder使用属性列表存储文件和文件夹的属性。在iOS中经常用属性列表作为配置文件存储用户的偏好选项。

plist与NSUserDefault的关系

NSUserDefaults就是使用属性列表来存储表示用户偏好的对象的,因此一些属性列表不支持的类型,比如NSColor和NSFont,是不能直接存储到NSUserDefaults的。

plist的访问和存储方法

你可以用两种方式将属性列表序列化到文件系统,或者从文件系统反序列化:

  • 如果属性列表的根对象是一个NSDictionary或NSArray对象(大部分情况),你可以调用他们的writeToFile:atomically:
    writeToURL:atomically:方法。这两个方法会将属性列表的所有对象以XML格式写人到文件中去。
    同理,调用initWithContentsOfFile:initWithContentsOfURL:或相应工厂方法dictionaryWithContentsOfURL:,都会读取属性列表的数据并构造相应的集合对象

  • 你可以将属性列表对象序列化成NSData对象,然后写入文件。先调用[NSPropertyListSerialization dataFromPropertyList:format:errorDescription:]序列化成NSData对象,然后调用[NSData writeToFile:atomically:][NSData writeToURL:atomically:]写入文件。
    同理,先调用[NSData [NSData initWithContentsOfFile:][NSData initWithContentsOfURL:]读取plist文件,再调用[NSPropertyListSerialization propertyListFromData:mutabilityOption:format:errorDescription:]将NSData对象反序列化成属性列表根对象

两种方式的比较:第一种方便;第二种灵活,比如可以将format改成binary格式

注意:NSDictionary或NSArray序列化属性列表时,必须保证里面包含的所有对象都是属性列表支持的类型

plist支持的类型

其他自定义的类型想要使用属性列表存储的话,需要先归档到NSData再存储,因此要先支持归档(实现Coding协议)才行~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容