iOS數(shù)據(jù)持久化之NSUserDefaults簡介

NSUserDefaults是偏好設置焰雕,一般專門用來保存應用程序的配置信息等阁谆。

NSUserDefaults是直接繼承自NSObject的:@interface NSUserDefaults : NSObject

/*!

+standardUserDefaults returns a global instance of NSUserDefaults configured to search the current application's search list.

*/

#if FOUNDATION_SWIFT_SDK_EPOCH_AT_LEAST(8)

@property (class, readonly, strong) NSUserDefaults *standardUserDefaults;

#endif

可以看出NSUserDefaults是一個單例茬祷,通過[NSUserDefaults standardUserDefaults]方法獲得它的一個實例葵姥。

下面來對NSUserDefaults的方法大致的分一下類

- (void)setObject:(nullable id)value forKey:(NSString *)defaultName

- (nullable id)objectForKey:(NSString *)defaultName

這一對方法是我們?nèi)粘_M行NSUserDefaults設置值和讀取值得最常用的方法谈山,而且從(nullable id)value和- (nullable id)可以看出何吝,value及objectForKey返回值必須是繼承NSObject的對象。

- (nullable id)objectForKey:(NSString *)defaultName有很多根據(jù)返回值類型不同的替代方法继谚,如下:

- (nullable NSString *)stringForKey:(NSString *)defaultName

- (nullable NSArray *)arrayForKey:(NSString *)defaultName

- (nullable NSDictionary<NSString *, id> *)dictionaryForKey:(NSString *)defaultName

- (nullable NSData *)dataForKey:(NSString *)defaultName

- (nullable NSArray*)stringArrayForKey:(NSString *)defaultName

- (nullable NSURL *)URLForKey:(NSString *)defaultName

- (NSInteger)integerForKey:(NSString *)defaultName

- (float)floatForKey:(NSString *)defaultName

- (double)doubleForKey:(NSString *)defaultName

- (BOOL)boolForKey:(NSString *)defaultName

詳細的說明這里就不說了烈菌,大家看文檔吧,特別簡單犬庇,這里很可喜的是給我們提供了返回基礎數(shù)據(jù)類型的方法僧界,可以省去我們進行類型轉(zhuǎn)換。

- (void)setObject:(nullable id)value forKey:(NSString *)defaultName同樣有很多根據(jù)傳入值類型不同的替代方法臭挽,如下:

- (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName

- (void)setFloat:(float)value forKey:(NSString *)defaultName

- (void)setDouble:(double)value forKey:(NSString *)defaultName

- (void)setBool:(BOOL)value forKey:(NSString *)defaultName

- (void)setURL:(nullable NSURL *)url forKey:(NSString *)defaultName

其中NSInteger捂襟、float、double欢峰、BOOL這幾個方法會幫我們將值轉(zhuǎn)為NSNumber葬荷,然后調(diào)用- (void)setObject:(nullable id)value forKey:(NSString *)defaultName方法涨共,所以以后不要說NSUserDefaults不可以直接設置基礎數(shù)據(jù)類型必須轉(zhuǎn)成NSNumber才可以,只不過方法不是直接調(diào)用- (void)setObject:(nullable id)value forKey:(NSString *)defaultName而已

對某個值得移除可以通過下面這個方法:

- (void)removeObjectForKey:(NSString *)defaultName

來舉個栗子:

defaults = [NSUserDefaults standardUserDefaults];

NSString *path = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"Preferences"];

NSLog(@"Preferences == %@",path);

UIButton *writeBtn = [UIButton buttonWithType:UIButtonTypeCustom];

[writeBtn setTitle:@"寫入NSUserDefaults" forState:UIControlStateNormal];

writeBtn.backgroundColor = [UIColor greenColor];

[writeBtn addTarget:self action:@selector(writeUserDefaults) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:writeBtn];

WeakSelf;

[writeBtn mas_makeConstraints:^(MASConstraintMaker *make) {

make.centerX.equalTo(weakSelf.view);

make.top.offset(80);

make.left.offset(20);

make.right.offset(-20);

make.height.offset(40);

}];

UIButton *readBtn = [UIButton buttonWithType:UIButtonTypeCustom];

[readBtn setTitle:@"讀取NSUserDefaults" forState:UIControlStateNormal];

readBtn.backgroundColor = [UIColor greenColor];

[readBtn addTarget:self action:@selector(readUserDefaults) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:readBtn];

[readBtn mas_makeConstraints:^(MASConstraintMaker *make) {

make.centerX.equalTo(weakSelf.view);

make.top.equalTo(writeBtn.mas_bottom).with.offset(30);

make.left.offset(20);

make.right.offset(-20);

make.height.offset(40);

}];

- (void)writeUserDefaults

{

NSString *name = @"王小明";

NSInteger age = 25;

BOOL isMarried = YES;

float money = 14356.23;

[defaults setObject:name forKey:@"name"];

[defaults setInteger:age forKey:@"age"];

[defaults setBool:isMarried forKey:@"isMarried"];

[defaults setFloat:money forKey:@"money"];

[defaults synchronize];

}

- (void)readUserDefaults

{

NSString *name = [defaults stringForKey:@"name"];

NSInteger age = [defaults integerForKey:@"age"];

BOOL isMarried = [defaults boolForKey:@"isMarried"];

float money = [defaults floatForKey:@"money"];

NSString *alertStr = [NSString stringWithFormat:@"name:%@? age:%ld? isMarried:%d? money:%2f",name, age, isMarried, money];

NSLog(@"%@", alertStr);

}

界面

首先我們先進入Preferences文件夾宠漩,初始狀態(tài)下該文件夾下沒有任何文件举反,點擊“寫入NSUserDefaults”按鈕,執(zhí)行寫入扒吁,會發(fā)現(xiàn)在Preferences文件夾生成了一個以Bundle Identifier為名的plist文件火鼻,打開如下:

plist文件內(nèi)容
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市雕崩,隨后出現(xiàn)的幾起案子魁索,更是在濱河造成了極大的恐慌,老刑警劉巖盼铁,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粗蔚,死亡現(xiàn)場離奇詭異,居然都是意外死亡饶火,警方通過查閱死者的電腦和手機鹏控,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肤寝,“玉大人当辐,你說我怎么就攤上這事±鹂矗” “怎么了瀑构?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長刨摩。 經(jīng)常有香客問我,道長世吨,這世上最難降的妖魔是什么澡刹? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮耘婚,結果婚禮上罢浇,老公的妹妹穿的比我還像新娘。我一直安慰自己沐祷,他們只是感情好嚷闭,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赖临,像睡著了一般胞锰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上兢榨,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天嗅榕,我揣著相機與錄音顺饮,去河邊找鬼。 笑死凌那,一個胖子當著我的面吹牛兼雄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播帽蝶,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼赦肋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了励稳?” 一聲冷哼從身側響起佃乘,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎麦锯,沒想到半個月后恕稠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡扶欣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年鹅巍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片料祠。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡骆捧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出髓绽,到底是詐尸還是另有隱情敛苇,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布顺呕,位于F島的核電站枫攀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏株茶。R本人自食惡果不足惜来涨,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望启盛。 院中可真熱鬧蹦掐,春花似錦、人聲如沸僵闯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鳖粟。三九已至社裆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間牺弹,已是汗流浹背浦马。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工时呀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晶默。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓谨娜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親磺陡。 傳聞我的和親對象是個殘疾皇子趴梢,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 一、文件 應用程序包 : 這里面存放的是應用程序的源文件币他,包括資源文件和可執(zhí)行文件坞靶。NSString *path ...
    今天又要上班嗎閱讀 596評論 0 2
  • NSUserDefaults適合存儲輕量級的本地數(shù)據(jù),比如要保存一個登陸界面的數(shù)據(jù)蝴悉,用戶名彰阴、密碼之類的,個人覺得使...
    Clark_new閱讀 2,124評論 2 7
  • 前言 在iOS開發(fā)中必不可少的要用到數(shù)據(jù)存儲拍冠,數(shù)據(jù)的處理是iOS開發(fā)中的核心技術尿这,適當?shù)膶?shù)據(jù)進行持久化存儲可以實...
    若小北00閱讀 8,018評論 6 28
  • 今天天氣有些陰沉,空氣有些燥熱庆杜,我的心情也帶有一絲煩悶射众。我和母親剛剛從超市里出來,正在往回家的路上走著晃财∵冻鳎回家的路...
    布雷路閱讀 372評論 5 5
  • 【2.1】,更新鏈接更新鏈接,更新內(nèi)容66666更新內(nèi)容
    418_b8af閱讀 137評論 0 0