iOS NSUserDefaults

NSUserDefaults適合存儲輕量級的本地數據,一些簡單的數據(NSString類型的)例如密碼,網址等,NSUserDefaults肯定是首選,但是如果我們自定義了一個對象,對象保存的是一些信息,這時候就不能直接存儲到NSUserDefaults了.

一.了解NSUserDefaults以及它可以直接存儲的類型

NSUserDefaults是一個單例,在整個程序中只有一個實力對象,他可以用于數據的永久保存,而且簡單實用,這是它可以讓數據自由傳遞的一個前提,也是大家喜歡用它保存簡單數據的一個主要原因.

NSUserDefaults支持的數據類型有
NSNumber(NSInteger,float,double),NSString,NSDate,NSArray,NSDictionary,BOOL
如果想要將上述數據類型的數據永久保存到NSUserDefaults中去,只需要簡單的操作(一個Value和一個Key),例如,想要保存一個NSString的對象,代碼實現為:

+(void)SetLoginToken:(NSString *)loginToken{
    NSUserDefaults *userToken = [NSUserDefaults standardUserDefaults];
    [userToken setObject:loginToken forKey:@"loginToken"];
    [userToken synchronize];
}

將數據取出的方式,只需要取出對應的key值就好了,代碼如下:

+(NSString *)GetToken
{
    NSUserDefaults *userToken = [NSUserDefaults standardUserDefaults];
    NSString * token = [userToken objectForKey:@"userToken"];
    return token;
}

此處要注意:對于相同的Key賦值約等于一次覆蓋,要保證每一個Key的唯一性

NSUserDefaults存儲的對象全是不可變的(這一點非常關鍵,弄錯的話程序會出bug),例如,如果我想要存儲一個NSMutableArray對象,我必須先創建一個不可變數組(NSArray)再將它存入NSUserDefaults中去,代碼如下:

 NSMutableArray * mutableArray  = [NSMutableArray arrayWithObjects: @"123",@"435", nil];
    NSArray * array = [NSArray arrayWithArray:mutableArray];
    [[NSUserDefaults standardUserDefaults] setObject:array forKey:@"注意存放對象是不可變的"];

取出數據是一樣的,想要用NSUserDefaults中的數據給可變數組賦值,先給出一個錯誤的寫法:


正確的寫法:

二.使用NSUserDefaults存儲自定義對象

1.將自定義類型轉換為NSData類型
當數據重復而且多的時候(例如想存儲全班同學的學好,姓名,性別(這個數據量可能太大了)),吐過不用SQLite存儲(多數據最好還是用數據庫),你可以選擇使用歸檔,再將文件寫入本地,但是這種方式和NSUserDefaults比起來麻煩多了(因為NSFileManager本來就挺復雜的),但是問題是,NSUserDefaults本身并不支持自定義對象的存儲,不過它支持NSData的類型,下面舉一個例子來介紹:

我們先建立一個叫Student的類,這個類里面有三個屬性(學號,姓名,性別),如圖:


我們要做的是將Student類型變成NSData類型,那么就必須實現歸檔:
這里要實現在.h文件中申明NSCoding協議,再在.m中實現encodeWithCoder方法和initWithCoder方法就可以了:
.h中修改文件如圖所示:


m中寫入代碼:


這樣就可以將自定義類型轉變成NSData類型了
2.將自定義類型數據存入NSUserDefaults中
如果要存儲全班同學的信息,我們可以建一個NSMutableArray來存放全班同學的信息(里面存儲的全是NSData對象)在需要存儲的地方加入代碼


從NSUserDefaults中取出數據再還原也比較簡單:
例如還原一個學生的數據:


或者還原一個班級中某個學生的數據:


NSUserDefaults是我們在編寫代碼中最常用的一個永久保存數據的方法,也是最簡單的.

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

推薦閱讀更多精彩內容

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,186評論 30 471
  • NSUserDefaults支持的數據類型有:NSNumber(NSInteger、float、double),N...
    大輝郞閱讀 650評論 0 1
  • 兩種方法刪除NSUserDefaults所有記錄 方法一 方法二 賬號和密碼信息 是存儲在Documents 中的...
    TenMios閱讀 817評論 0 2
  • 在學習文本分類的時候發現主要有以下幾個步驟,借助代碼說明(代碼大多參考:機器學習算法原理與編程實戰,不過發現給的語...
    sf705閱讀 10,883評論 6 12
  • 有那么一天 我會悄然消失 請不要思念 我去了理想之地 有那么一天 我會無聲離去 請不要哭泣 我去了夢想國度 那一天...
    云散月彷徨閱讀 122評論 0 0