數(shù)據(jù)持久化
什么是數(shù)據(jù)持久化?
數(shù)據(jù)的永久存儲
為什么要做數(shù)據(jù)持久化:;存儲在內(nèi)存中的數(shù)據(jù),程序關閉,內(nèi)存釋放,數(shù)據(jù)丟失,這種數(shù)據(jù)是臨時的
數(shù)據(jù)持久化的本質:數(shù)據(jù)保存成文件,存儲到程序的沙盒中
一、沙盒機制
每個應用程序位于文件系統(tǒng)的嚴格限制部分
每個應用程序只能在為該程序創(chuàng)建的文件系統(tǒng)中讀取文件
每個應用程序在iOS系統(tǒng)內(nèi)都放在了統(tǒng)一的文件夾目錄下
沙盒的本質就是一個文件夾,名字是隨機分配的,按照UUID標示符標記分配的
沙盒路徑的位置
1、通過Finder查找程序沙盒相對路徑
~/Library/application Support/iphone Simulator
常見問題
模擬器路徑內(nèi)有可能包含多個系統(tǒng)版本的路徑
iPhone5及以前版本 32
iPhone5s 64

沙盒構成
Document 存儲用戶數(shù)據(jù),需要備份的信息
Library/Caches 存儲緩存文件,程序專用的支持文件
Library/PReferences 存儲應用程序的偏好設置文件
.app 程序包(iOS時, app不存儲在沙河中,有單獨的文件夾存儲所有程序的app包)
tmp 存儲臨時文件。比如:下載的zip包,解壓后的再刪除
通過代碼查找程序沙盒相對路徑

獲取沙盒目錄路徑的方法
NSHomeDirectory 沙盒主路徑
NSDocumentDirectory Documents文件夾
NSLibraryDirectory Library 文件夾
NSCachesDiectory Caches 文件夾
NSTemporaryDirectory temp文件夾

每個應用程序文件夾內(nèi)的app文件路徑的獲取

路徑打印結果如下:

二、簡單對象寫入文件
文件存儲的相對目錄

字符串對象寫入文件
1、字符串對象寫入文件

2、數(shù)組對象寫入文件

3、字典對象寫入文件

4、二進制對象寫入文件

根據(jù)構造出的路徑我們通過查找就可以在文件內(nèi)看到生成的相應文件,如下:


數(shù)組和字典中的對象類型必須是上述四種
三、使用NSFileManager來管理文件
NSFileManager,文件管理,使用detaultManager,創(chuàng)建單例對象
可以創(chuàng)建文件夾
可以創(chuàng)建、移動、復制、刪除文件
可以判斷文件是否存在
具體步驟如下:

四、復雜對象寫入文件
什么是復雜對象
1、在Foundation框架內(nèi)不存在的數(shù)據(jù)類
2、無法在程序內(nèi)通過writeToFile類型的方法寫入到文件內(nèi)
3、復雜對象至少包含一個實例對象
復雜對象怎么進行數(shù)據(jù)持久化,這就涉及到歸檔和反歸檔
復雜對象無法通過writeToFile:方法進行數(shù)據(jù)持久化,只能通過將復雜對象轉換為NSData,通過writeToFile:進行數(shù)據(jù)持久化
通過歸檔,將復雜對象轉換為NSData;通過反歸檔,將NSData轉換為復雜對象
復雜對象寫入文件時要遵守NSCoding 協(xié)議

例如我們建立一個Person類,使其接受NSCoding協(xié)議,同時創(chuàng)建一些Person屬性

在對復雜對象進行歸檔時,執(zhí)行下面方法

在對復雜對象反歸檔時,執(zhí)行下面的方法

復雜對象寫入文件(歸檔和反歸檔)


新聞熱點
疑難解答