ios數據存儲的方式
『壹』 IOS 存儲方式(PList、NSUserDefaults、歸檔、CoreData、資料庫、文件)
iOS開發,plist文件讀寫那些事 - (jianshu.com)
NSUserDefaults存儲輕量級 的本地數據 ,比如要保存一個登陸界面的數據,用戶名、密碼之類的。
支持的數據類型有 NSString、 NSNumber、NSInteger、NSFloat、BOOL、NSArray、NSDictionary、NSDate、 等系統定義的數據類型。
用NSUserDefaults存儲的數據下次程序運行的時候依然存在 .它的數據存儲在應用程序內置的一個plist文件里, 在/Library/Prefereces沙盒路徑下.
NSUserDefaults是定時把緩存中的數據寫入磁碟的,而不是即時寫入,為了防止在寫完NSUserDefaults後程序退出導致的數據丟失,可以在寫入數據後使用synchronize強制立即將數據寫入磁碟:
使用NSKeyedArchiver 對數據進行 歸檔 反歸檔(將自定義類型轉換為NSData類型:)
NSuserDefaults 的坑
iOS 最終,我還是決定放棄使用NSUserDefaults了 - (jianshu.io)
歸檔: ,就是將數據寫到一個文件裡面去。一般我們的應用的變數常量之類的數據都是在內存裡面的,只要APP關閉,這些數據都會丟失。但是把數據存儲到文件裡面去,就能將數據保存到本地磁碟裡面(目前iOS基本就是在沙盒裡面操作了),不管是APP關閉還是重啟設備,下次啟動APP的時候都能夠讀出來。
解檔: (別人也叫反歸檔),就是將數據從文件裡面讀取出來。在程序裡面使用。
【iOS】數據持久化:使用NSKeyedArchiver進行數據歸檔 - (jianshu.com)
iOS 開發Core Data使用方法 – 技術狗 (jishudog.com)
IOS 開發文件操作——NSFileManager - 星語海藍 - 博客園 (cnblogs.com)
(15條消息) iOS文件操作_你有故事,我囿酒-CSDN博客
參考:
iOS開發 - 關於 NSUserDefaults 的使用 - (jianshu.com)
『貳』 iOS開發之數據存儲以及刪除
iOS本地數據保存有多種方式,歸納如下:
本章不僅是學習多種數據存儲方式,也可學習到其他知識點,下面就讓我們詳細來看:
具體方培梁核法為:
第一步:獲得文件即將保存的路徑,並生成在該路徑下的文件:
第二步:往文件中寫入/讀取:
方法一:
方法配掘二:
方法三:
2.NSUserDefaults:是一個單例對象,在整個應用程序的生命周期中都只有一個實例。用渣旅來保存應用程序設置和屬性、用戶保存的數據。存儲在沙盒的Library/Preference中,NSUserDefaults可以存儲的數據類型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。寫入和讀取都比較簡單,如下:
寫入:
NSString *str = [userDefault objectForKey:@"gang"];
@interface Person : NSObject <NSCoding>//遵守NSCoding協議
@property (nonatomic,strong) NSString *name;
@property (nonatomic,assign) NSInteger age;
@end
解檔操作:
同樣調用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"];
// 存檔完畢(一定要調用這個方法)
[archiver finishEncoding];
[data writeToFile:path atomically:YES];
NSData *undata = [NSData dataWithContentsOfFile:path];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
[unarchiver decodeObjectForKey:@"person"];
[unarchiver decodeObjectForKey:@"bir"];
// 恢復完畢
[unarchiver finishDecoding];
『叄』 ios監管模式存儲路徑
不管是在iOS還是Android開發過程中,我們都經常性地需要存儲一些狀態和數據,比如用戶對於App的相關設置、需要在態信橡本地緩存的數據等等。根據要存儲的的數據的大小、存儲性質以及存儲類型,在iOS和Android中哪個都有多種存儲方式。其中,iOS中的存儲方式主要包括以下六類:
plist文件(屬性列表)
preference(偏好設置帆旁)
NSKeyedArchiver(歸檔)
SQLite 3
CoreData
手動存放沙盒
一、沙盒機制
在研究存儲方式之前,我們有必要先研究下這些文件會存儲到什麼地方去,這就需要我們了解iOS App特有的沙盒機制了。iOS程序默認情況下只能訪問程序自己的目錄,這個目錄被稱為「沙盒」,即沙盒其實就是一個App特有的一個文件夾,iOS下每個App都有自己特有的一個沙盒,其結構和目錄特性都是一樣的。
1.1 沙盒結構
既然沙盒就是一個文件夾,那就看看裡面有什麼吧。沙盒的目錄結構如下圖所示,每個App的沙盒都是由下圖所示的四部分組成,每一部分中存放的數據和內容都是有一定的規范和性質的。該目錄路徑的獲取方法是直接通過 NSHomeDirectory() 就得到和應用沙盒的坦蠢路徑。
此外,每一個App還有一個Bundle目錄,即「應用程序包」,該目錄下 存放的是應用程序的源文件,包括資源文件和可執行文件。
『肆』 iOS中常用的幾種持久化存儲
1、偏好設置(NSUserDefaults)
2、plist文件存儲
3、歸檔
4、SQLite
5、Core Data
我們首先需要了解下沙盒(Sandbox)
Application :存放程序源文件,上架前經過數字簽名,上架後不可修改
Documents : 保存應⽤運行時生成的需要持久化的數據,iTunes同步設備時會備份該目錄。例如,游戲應用可將游戲存檔保存在該目錄
tmp : 保存應⽤運行時所需的臨時數據,使⽤完畢後再將相應的文件從該目錄刪除。應用 沒有運行時,系統也可能會清除該目錄下的文件。iTunes同步設備時不會備份該目錄。
Library/Caches : 保存應用運行時⽣成的需要持久化的數據,iTunes同步設備時不會備份 該目錄。⼀一般存儲體積大、不需要備份的非重要數據,比如網路數據緩存存儲到Caches下
Library/Preference : 保存應用的所有偏好設置,如iOS的Settings(設置) 應⽤會在該目錄中查找應⽤的設置信息。iTunes同步設備時會備份該目錄
NSUserDefaults是個單例類,用於存儲少量數據。NSUserDefaults實際上對plist文件操作的封裝,更方便我們直接操作,一般用於存儲系統級別的偏好設置。比如我們經常將登錄後的用戶的一些設置通過NSUserDefaults存儲到plist文件中。
NSUserDefaults使用起來非常簡單,例如將用戶的賬號和密碼存儲起來: