iOS - NSUserDefaults 实现数据的持久化保存
前言
在開發(fā)的時候,我們經(jīng)常會遇到一些場景,需要我們持久化保存一些數(shù)據(jù)。通常我們會將相對結(jié)構(gòu)化的數(shù)據(jù)保存在遠端或者本地的數(shù)據(jù)庫中,而對于相對零散的變量數(shù)據(jù),保存在數(shù)據(jù)庫中是不太合適的。這時,接下介紹的這個方法就可以派上用場了~
NSUserDefaults 是一個系統(tǒng)提供的,主要用于應(yīng)用數(shù)據(jù)永久保存的類,通常以單例的形式使用,可以通過 [NSUserDefaults standardUserDefaults] 來獲取單例對象,它是線程安全的。
NSUserDefaults 的數(shù)據(jù)保存在應(yīng)用沙盒的 Library/Preferences/ 目錄下,并且以 .plist 文件的形式存在。
NSUserDefaults 的基本使用
支持保存的數(shù)據(jù)類型主要有,基本數(shù)據(jù)類型、NSNumber、NSString、NSArray、NSDictionary、NSDate、NSData等。如果想保存上面提到的以外的類型,就需要將其歸檔到 NSData 中進行存儲,然后使用 NSUserDefaults 進行保存。
數(shù)據(jù)存儲:
// 基本類型數(shù)據(jù)的存儲 [[NSUserDefaults standardUserDefaults] setInteger:1024 forKey:@"NSINTEGER"]; // 字符串存儲 [[NSUserDefaults standardUserDefaults] setObject:@"iOS" forKey:@"NSSTRING"]; // 數(shù)組存儲 NSArray *arr = @[@"C++", @"Java", "Pyhton"]; [[NSUserDefaults standardUserDefaults] setObject: forKey:@"NSARRAY"];數(shù)據(jù)獲取:
// 基本類型數(shù)據(jù)獲取 NSInteger integer = [[NSUserDefaults standardUserDefaults] integerForKey:@"NSINTEGER"]; // 字符串?dāng)?shù)據(jù)獲取 NSString *str = [[NSUserDefaults standardUserDefaults] stringForKey:@"NSSTRING"]; // 數(shù)組數(shù)據(jù)獲取 NSArray *arr = [[NSUserDefaults standardUserDefaults] arrayForKey:@"NSARRAY"];刪除數(shù)據(jù):
// 根據(jù)數(shù)據(jù)的 key 進行數(shù)據(jù)刪除 [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSINTEGER"];自定義數(shù)據(jù)類型:
// 保存自定義類型數(shù)據(jù) VGUser *user = [VGUser new]; NSData *data = [NSKeyedArchiver archivedDataWithRootObject:user]; [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"VGUser"];// 移除自定義類型數(shù)據(jù) [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"VGUser"];應(yīng)用舉例
這里舉一個比較常用的 NSUserDefaults 應(yīng)用例子,我們的 APP 在首次打開的時候,總會出現(xiàn)各種用戶引導(dǎo)動畫,它的展示時機是在用戶首次打開 APP 時,引導(dǎo)動畫在展示過后便不再出現(xiàn),除非用戶重寫安裝該 APP。
這個時候就可以用上 NSUserDefaults,在沙盒里保存一個 BOOL 類型的 isShowed 變量,當(dāng)它為 NO 的時候,我們就展示引導(dǎo)動畫,并將沙盒中的變量置為 YES,這就能保證引導(dǎo)動畫在 APP 的一次安裝中只展示一次。
// 沙盒中數(shù)據(jù)的 key static NSString const *kUserGuidanceShowed = @"kUserGuidanceShowed";- (void)showUserGuidanceAnimation {BOOL isShowed = [[NSUserDefaults standardUserDefaults] kUserGuidanceShowed];if (!isShowed) {[[NSUserDefaults standardUserDefaults] setBool:YES forKey:kUserGuidanceShowed];// show Animation} }寫在最后
雖然 NSUserDefaults 能簡單地幫助我們實現(xiàn)數(shù)據(jù)的持久化保存,但是濫用 NSUserDefaults 來保存大量的數(shù)據(jù)信息,反而會影響 APP 的啟動速度。
總結(jié)
以上是生活随笔為你收集整理的iOS - NSUserDefaults 实现数据的持久化保存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P1744 采购特价商品(SPFA求最短
- 下一篇: iOS - 利用 UIBezierPat