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协议)才行~