plist是什么?
屬性列表是一種結(jié)構(gòu)化數(shù)據(jù)表示,簡(jiǎn)稱做“plist”,它在Cocoa和CoreFoundation中使用,并作為一種便利方式來(lái)存儲(chǔ)、組織和訪問(wèn)標(biāo)準(zhǔn)數(shù)據(jù)類型。
屬性列表被廣泛應(yīng)用在OS X 和 iOS的程序中,比如,OS X Finder使用屬性列表存儲(chǔ)文件和文件夾的屬性。在iOS中經(jīng)常用屬性列表作為配置文件存儲(chǔ)用戶的偏好選項(xiàng)。
plist與NSUserDefault的關(guān)系
NSUserDefaults就是使用屬性列表來(lái)存儲(chǔ)表示用戶偏好的對(duì)象的,因此一些屬性列表不支持的類型,比如NSColor和NSFont,是不能直接存儲(chǔ)到NSUserDefaults的。
plist的訪問(wèn)和存儲(chǔ)方法
你可以用兩種方式將屬性列表序列化到文件系統(tǒng),或者從文件系統(tǒng)反序列化:
如果屬性列表的根對(duì)象是一個(gè)NSDictionary或NSArray對(duì)象(大部分情況),你可以調(diào)用他們的
writeToFile:atomically:
或writeToURL:atomically:方法。這兩個(gè)方法會(huì)將屬性列表的所有對(duì)象以XML格式寫(xiě)人到文件中去。
同理,調(diào)用initWithContentsOfFile:或initWithContentsOfURL:或相應(yīng)工廠方法dictionaryWithContentsOfURL:,都會(huì)讀取屬性列表的數(shù)據(jù)并構(gòu)造相應(yīng)的集合對(duì)象你可以將屬性列表對(duì)象序列化成NSData對(duì)象,然后寫(xiě)入文件。先調(diào)用
[NSPropertyListSerialization dataFromPropertyList:format:errorDescription:]序列化成NSData對(duì)象,然后調(diào)用[NSData writeToFile:atomically:]或[NSData writeToURL:atomically:]寫(xiě)入文件。
同理,先調(diào)用[NSData [NSData initWithContentsOfFile:]或[NSData initWithContentsOfURL:]讀取plist文件,再調(diào)用[NSPropertyListSerialization propertyListFromData:mutabilityOption:format:errorDescription:]將NSData對(duì)象反序列化成屬性列表根對(duì)象
兩種方式的比較:第一種方便;第二種靈活,比如可以將format改成binary格式
注意:NSDictionary或NSArray序列化屬性列表時(shí),必須保證里面包含的所有對(duì)象都是屬性列表支持的類型
plist支持的類型

其他自定義的類型想要使用屬性列表存儲(chǔ)的話,需要先歸檔到NSData再存儲(chǔ),因此要先支持歸檔(實(shí)現(xiàn)Coding協(xié)議)才行~