關于NSUserDefaults

作為iOS重要的數據持久化技術之一,相信很多人都用過NSUserDefaults ,原因無他,實在太好用了,我曾見過有人用它來做正向傳值的 ==!

1.NSUserDefaults適合保存用戶配置信息。

2.NSUserDefaults能保存的數據類型有string、array、dictionary、data、url、integer、float、double、BOOL等數據類型。

3.NSUserDefaults里的信息以plist文件存儲在沙盒中,具體存在/Library/Preferences中


初始化:

NSUserDefaults有四個初始化方法:一個類方法,三個對象方法。

1. + (NSUserDefaults*)standardUserDefaults;//系統推薦的初始化方法。

2.- (instancetype)init;//效果和standarUserDefaults一樣。

3.- (nullableinstancetype)initWithSuiteName:(nullableNSString*)suitenameNS_AVAILABLE(10_9,7_0)NS_DESIGNATED_INITIALIZER;//這個方法要傳入一個字符串,待會再講

4.- (nullableid)initWithUser:(NSString*)usernameNS_DEPRECATED(10_0,10_9,2_0,7_0);//這個方法在ios7.0之后已經被棄用了,目前這個方法貌似無用。

NSUserDefaults會將開發者存入它里面的信息以plist文件的形式寫入到沙盒中。第一個和第二個方法初始化生成的plist文件的名稱以這樣的規律命名:(bundle identifier).(項目名).plist!

第三個方法比較有意思,它會以傳進來的字符串xxxx為名字創建一個plist文件:xxxx.plist!

第四個方法不知道有沒有用,我沒試成功。

需要注意的是:在用上面的三個方法初始化成功之后,在setValue:forkey: 之前,你的/Library/Preferences中是沒有那個“應該”出現的plist文件的,不信的可以去使一下,就初始化,但是不賦值。

然后就是各種賦值和讀取的方法,太簡單了,不介紹。

各種有點難以理解的方法:


1.+ (void)resetStandardUserDefaults;

//這個方法是在第一個初始化的類方法之后的,看字面意思應該重置userDefault(但是貌似沒起作用,有知道的求告知)

2.- (void)registerDefaults:(NSDictionary *)registrationDictionary;

//將一個指定字典的內容添加到注冊域(應該是NSRegistrationDomain)。如果不存在注冊域,則用指定的字典創建一個,然后NSRegistrationDomain會被添加到搜索列表(?)中。注冊域中的內容是不會寫入到沙盒中的,你需要在程序啟動的時候手動調用它,或者你可以將它寫入到plist文件中保存起來,然后調用registerDefaults:就傳入你讀取到的文件內容。(這里應該是和下面系統默認創建的兩個域一樣,默認是在內存中的。)

3.- (void)addSuiteNamed:(NSString*)suiteName;

? - (void)removeSuiteNamed:(NSString*)suiteName;

//插入一個指定的域名到接收者的搜索列表。這個指定的域名類似于bundle identifier,但不是必須和應用包綁定的。一個suite可以用來保存首選項,進行多個應用之間的通信。//從接受者的搜索列表中刪除一個指定的域名。

4.@property(readonly,copy)NSArray *volatileDomainNames;

//這個屬性返回的是不穩定的域(這里應該是指只存儲在內存中的NSUserDefaults對象,但沒有寫入沙盒,是程序默認創建的)的名字(也就是NSUserDefaults上面公開的三個字符串中的兩個)NSArgumentDomain和NSRegistrationDomain

FOUNDATION_EXPORTNSString*const NSGlobalDomain;//這個不在arr中,就是說這個是穩定的?(后面也沒找到以這個命名的域)

5.- (NSDictionary *)volatileDomainForName:(NSString*)domainName;

然后利用這個方法打印上面那個volatileDomainNames,發現NSArgumentDomain的域里是沒有內容的,NSRegistrationDomain里是些系統配置,內容為:

dic={

AppleLanguages = ??? (

"zh-Hans-CN",

"en-CN",

en

);

NSInterfaceStyle = macintosh;

NSLanguages = ??? (

"zh-Hans-CN",

"en-CN",

en

);

}

6.- (void)setVolatileDomain:(NSDictionary *)domain forName:(NSString*)domainName;

? - (void)removeVolatileDomainForName:(NSString*)domainName;

往下看,有個數組,返回的是穩定的域(這里應該是指持久化的),打印出來發現都是我創建出來的plist文件!!所以,NSUserDefaults里的域應該是NSUserDefaults對象的存儲空間!下面是打印的信息:

arr=(

xxxhuaMiss,

xxxhua,

“www.pxh.com.testNSUerDefaults”,

llla

)

7.- (NSArray*)persistentDomainNamesNS_DEPRECATED(10_0,10_9,2_0,7_0);

8.- (nullableNSDictionary *)persistentDomainForName:(NSString*)domainName;

- (void)setPersistentDomain:(NSDictionary*)domain forName:(NSString*)domainName;

- (void)removePersistentDomainForName:(NSString*)domainName;


9.- (BOOL)synchronize;

//將信息同步的方法,避免因為程序異常退出而導致信息保存失敗的意外。

10.- (BOOL)objectIsForcedForKey:(NSString*)key;

? ? - (BOOL)objectIsForcedForKey:(NSString*)key inDomain:(NSString*)domain;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,835評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,676評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,730評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,118評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,873評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,266評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,330評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,482評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,036評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,846評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,025評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,575評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,279評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,684評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,953評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,751評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,016評論 2 375

推薦閱讀更多精彩內容

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,196評論 30 471
  • NSUserDefaults是一個單例,在整個程序中只有一個實例對象,可以用于數據的永久保存。 他的作用一般是用來...
    AlenChen閱讀 508評論 0 51
  • NSUserDefaults# 一點認知## 1.作用:-保存默認用戶設置。讓你的程序把用戶體驗做到做好-相當于提...
    hoggenWang閱讀 1,210評論 0 0
  • iOS 開発の結構 畫面 UI UIWebview [[UIApplication sharedApplicati...
    RencaiXiong閱讀 595評論 0 0
  • 1.OC里用到集合類是什么? 基本類型為:NSArray,NSSet以及NSDictionary 可變類型為:NS...
    輕皺眉頭淺憂思閱讀 1,391評論 0 3