一、 首先簡述一下 Userdefault (介紹使用了該作者的文章)

成都創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站制作、成都做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)中衛(wèi),10年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108
1.適合存儲輕量級的本地數(shù)據(jù)。
比如用戶id? 用戶的登錄token什么的? 這種比較短小的數(shù)據(jù)
2.NSUserDefaults支持的數(shù)據(jù)格式有:NSNumber、NSData、NSDate、NSString、NSArray、NSDictionary、BOOL。
3.以鍵值對的形式進(jìn)行存儲。
4.存儲時間為整體應(yīng)用程序的存儲時間,如果想需要刪除,需要刪除整體應(yīng)用程序。
?? 存儲聲明的時候因為是動態(tài)的,先聲明再調(diào)用,聲明存儲的時候不會出現(xiàn)異常提示,但執(zhí)行的時候會出現(xiàn) ? --斷言--(因為存儲對象在這里編譯是nil)
iOS 開發(fā)中一般有如下幾種數(shù)據(jù)存儲方式,需要根據(jù)具體的業(yè)務(wù)場景,選擇合適的數(shù)據(jù)存儲方式。
用戶默認(rèn)設(shè)置 – 這種情況通常不需要用戶干預(yù),如游戲通關(guān)信息,Video播放記錄,退出之后下次進(jìn)入時恢復(fù)到退出時的情況。
設(shè)置束提供了一個通過 iPhone、iPad的設(shè)置應(yīng)用程序進(jìn)行配置的接口。
直接訪問文件系統(tǒng)讀寫屬于當(dāng)前App的iOS文件系統(tǒng)部分的文件。
SQLite 數(shù)據(jù)庫是嵌入式的和輕量級的SQL數(shù)據(jù)庫,SQLite 是由C實現(xiàn)的。
遠(yuǎn)端數(shù)據(jù)庫這個一般由App調(diào)用遠(yuǎn)端的RESTFulWCF服務(wù),將JSON、XML 數(shù)據(jù)傳遞給遠(yuǎn)端的 Web 服務(wù),讀寫數(shù)據(jù)庫的邏輯完全在 Web 服 務(wù)端實現(xiàn)。
iOS本地數(shù)據(jù)保存有多種方式,歸納如下:
本章不僅是學(xué)習(xí)多種數(shù)據(jù)存儲方式,也可學(xué)習(xí)到其他知識點,下面就讓我們詳細(xì)來看:
具體方法為:
第一步:獲得文件即將保存的路徑,并生成在該路徑下的文件:
第二步:往文件中寫入/讀取:
方法一:
方法二:
方法三:
2.NSUserDefaults:是一個單例對象,在整個應(yīng)用程序的生命周期中都只有一個實例。用來保存應(yīng)用程序設(shè)置和屬性、用戶保存的數(shù)據(jù)。存儲在沙盒的Library/Preference中,NSUserDefaults可以存儲的數(shù)據(jù)類型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。寫入和讀取都比較簡單,如下:
寫入:
NSString *str = [userDefault objectForKey:@"zhigang"];
@interface Person : NSObject NSCoding//遵守NSCoding協(xié)議
@property (nonatomic,strong) NSString *name;
@property (nonatomic,assign) NSInteger age;
@end
解檔操作:
同樣調(diào)用NSCoder子類NSKeyedArchiver的方法unarchiveRootObject:toFile: 即可
[NSKeyedUnarchiver unarchiveObjectWithFile:path];
NSMutableData *data = [NSMutableData data];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
[archiver encodeObject:person forKey:@"person"];
[archiver encodeObject:bir forKey:@"bir"];
// 存檔完畢(一定要調(diào)用這個方法)
[archiver finishEncoding];
[data writeToFile:path atomically:YES];
NSData *undata = [NSData dataWithContentsOfFile:path];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
[unarchiver decodeObjectForKey:@"person"];
[unarchiver decodeObjectForKey:@"bir"];
// 恢復(fù)完畢
[unarchiver finishDecoding];
一般獲取本地數(shù)據(jù)是從plist文件中讀取JSON數(shù)據(jù)。
讀取數(shù)據(jù):
NSString
*plistPath
=
[[NSBundle
mainBundle]
pathForResource:@"city"
ofType:@"plist"];
NSArrary
*cityArray
=
[[NSArray
alloc]initWithContentsOfFile:plistPath];
這里的cityArray根據(jù)你存在plist中的數(shù)據(jù)類型來確定,如果plist中是字典類型,那么你這里需要使用NSDictionary去存儲你從plist中獲取到的數(shù)據(jù)。
至于本地存儲數(shù)據(jù)的話根據(jù)你項目的具體功能來設(shè)計,一般的小型數(shù)據(jù)如用戶昵稱、手機(jī)號等使用NSUserDefault即可,但是如果是大量數(shù)據(jù)如賬單類app中的賬單數(shù)據(jù)那么此時需要考慮使用sqlite3去存儲數(shù)據(jù),至于密碼之類就需要使用NSKeydArchiver去存儲。
之前項目中在展示用戶數(shù)據(jù)的時候都是先直接從網(wǎng)絡(luò)獲取,然后再展示,之所以這樣做而不將用戶數(shù)據(jù)存儲到本地再展示的原因是當(dāng)時考慮到如果用戶在其他設(shè)備上對該用戶的數(shù)據(jù)進(jìn)行了修改那么原來設(shè)備上用戶信息的展示就會出錯,還是從網(wǎng)絡(luò)獲取的數(shù)據(jù)可靠。(存儲到本地同樣能正確展示用戶數(shù)據(jù),只怪自己當(dāng)初沒深入思考過這個問題)
先從網(wǎng)絡(luò)獲取用戶數(shù)據(jù)再展示用戶數(shù)據(jù)會有一個問題,由于網(wǎng)路請求數(shù)據(jù)是需要一定時間的,這樣當(dāng)我打開一個包含用戶數(shù)據(jù)的頁面的時候會有片刻時間無法看到用戶的數(shù)據(jù),尤其在這個頁面包含用戶頭像的時候這個效果(閃屏)更加明顯,給用戶的體驗不是很好。
我們可以在項目中創(chuàng)建一個存儲用戶信息的類,這個類可以將用戶信息存儲到本地,在展示用戶數(shù)據(jù)的時候 先從本地去取數(shù)據(jù) 這樣就不會有之前片刻時間看不到用戶數(shù)據(jù)的閃屏效果, 再從網(wǎng)絡(luò)上獲取數(shù)據(jù)同時將數(shù)據(jù)存儲到本地,再重復(fù)從本地取的操作(這樣能保證數(shù)據(jù)是最新的,不會出錯) 。
存儲用戶數(shù)據(jù)到本地有三個要點需要注意:
這個存儲用戶數(shù)據(jù)的類相當(dāng)于一個中介,在從網(wǎng)絡(luò)獲取到數(shù)據(jù)時并沒有直接去展示用戶數(shù)據(jù)而是先將數(shù)據(jù)放到了中介中,在展示用戶數(shù)據(jù)的時候再去這個存儲了用戶數(shù)據(jù)的中介中去取數(shù)據(jù)。
本篇文章到這里就結(jié)束了,愿大家加班不多工資多,男同胞都有女朋友,女同胞都有男朋友。????
plist方式保存數(shù)據(jù)
plist可以保存的類型為數(shù)組與字典.
在介紹plist文件保存之前,先介紹幾個方法。
Preferences方式保存數(shù)據(jù)
相比plist方式保存數(shù)據(jù)來說,Preferences方式的優(yōu)勢在于:1.不需要關(guān)心文件名.
2.快速的鍵值對存取.
Preferences 與 application 一樣,是一個單例.
名稱欄目:ios數(shù)據(jù)存儲開發(fā),iOS應(yīng)用與數(shù)據(jù)
分享鏈接:http://chinadenli.net/article37/dsedesj.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、網(wǎng)站設(shè)計公司、網(wǎng)站內(nèi)鏈、網(wǎng)站導(dǎo)航、網(wǎng)站策劃、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)