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支持的类型

iOS框架--属性列表(PropertyList)_第1张图片

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

你可能感兴趣的:(iOS框架--属性列表(PropertyList))