Property List (屬性表)
定義:Property List文件是一種用來(lái)存儲(chǔ)序列化后的對(duì)象 的文件。屬性列表文件的文件擴(kuò)展名 為.plist,因此通常被稱為 plist 文件。
pl是一種格式,包含了(NSData,NSString,NSNumber,NSDate,NSArray,NSDictionary 這六種任意組合創(chuàng)建的結(jié)構(gòu)體)。
NSUserDafults相當(dāng)于一個(gè)緩存,而plist是一個(gè)文件。
NSUserDefault,它其實(shí)也是以property list 的形式來(lái)存儲(chǔ)的,但是它有限制,比如說NSColor和NSFont等類型式不能夠直接存儲(chǔ)的,我們必須要轉(zhuǎn)換他們,要把他們轉(zhuǎn)換成NSData類型來(lái)存。
總結(jié)一下就是說,plist 文件和NSUserDefaults都是存儲(chǔ)文件的一種方法。至于plist怎么儲(chǔ)存,等要用的時(shí)候再來(lái)補(bǔ)充,先了解。
NSUserDefaults
定義:
1. NSUserDefaults類用于保存應(yīng)用程序設(shè)置和屬性以及用戶數(shù)據(jù)。例如,你可以存儲(chǔ)用戶在應(yīng)用程序中使用的圖片或默認(rèn)顏色方案,或者背景等。這些對(duì)象存儲(chǔ)在iOS所謂的“defaults系統(tǒng)”中。
2. iOS的defaults系統(tǒng)在整個(gè)app中都是可用的,因此存放到defaults系統(tǒng)中的數(shù)據(jù)也是整個(gè)應(yīng)用程序生命周期中可用的。也就是說,無(wú)論用戶關(guān)閉程序還是關(guān)機(jī),在用戶再次打開程序或開機(jī)后這些數(shù)據(jù)仍然存在。
3. 從NSUserDefaults返回的值是不可改變的,即便是你在存儲(chǔ)的時(shí)候使用的是可變的值。例如你使用mutable string做為“MyStringDefault”的值,當(dāng)你做使用stringForKey:方法獲取的值,這個(gè)值仍然是不可變的。
4. NSUserDefaults是單例,同時(shí)也是線程安全的
5. NSUserDefaults可以存儲(chǔ)的數(shù)據(jù)類型只能是property list類型的數(shù)據(jù)。(NSData,NSString,NSNumber,NSDate,NSArray,NSDictionary)
如果你想保存其他類型,如UIImage,你應(yīng)該進(jìn)行編碼(即archive),或者將它轉(zhuǎn)換為NSData、NSNumber或者NSString。
方法
一.得到共享的NSUserDefaults實(shí)例
+ (NSUserDefaults *)standardUserDefaults
二.初始化一個(gè)NSUserDefaults對(duì)象
- (id)initWithUser:(NSString *)username
三.記錄默認(rèn)值
四.得到默認(rèn)值。
得到數(shù)據(jù)時(shí)候用的方法,作用可以通過方法名輕松看出。
五.設(shè)置默認(rèn)值
寫入數(shù)據(jù)時(shí)候的方法。
六.刪除某個(gè)默認(rèn)值
七.維護(hù)持久域
八.訪問管理環(huán)境的keys
九.管理查找列表
十.維護(hù)不穩(wěn)定域
十一.維護(hù)程序組
如何使用NSUserDefaults?
你可以把它當(dāng)做是一個(gè)小型的數(shù)據(jù)庫(kù),在存儲(chǔ)和讀取數(shù)據(jù)之前,你需要調(diào)用方法: standardUserDefaults :
如:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
我把這個(gè)方法理解為,打開數(shù)據(jù)庫(kù)的大門,這樣你就可以對(duì)里面的數(shù)據(jù)做各種操作,也可以將存儲(chǔ)數(shù)據(jù)進(jìn)來(lái)。
存儲(chǔ)數(shù)據(jù)和讀取數(shù)據(jù)有各種方法,需要注意的是,存儲(chǔ)數(shù)據(jù)需要完成方法 synchronize:,這個(gè)方法完成的作用是同步數(shù)據(jù),也就是將你做出改變的數(shù)據(jù)更新。
如:
[defaults synchronize];
應(yīng)該說這兩個(gè)知識(shí)點(diǎn)了解的都不是很透徹,因?yàn)楝F(xiàn)在也用不上,所以就先以了解為主,等以后正式學(xué)習(xí)的時(shí)候再補(bǔ)充。
聯(lián)系客服