iOS中的資料儲存

檀志文發表於2017-12-14

NSArray *documentPaths =

NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);獲取沙盒中檔案目錄的全路徑,其中的布林值是否需要通過,~擴充套件路徑。

還有一種方法就是使用NSString

*sandboxPath = NSHomeDirectory();NSString

*documentPath = [sandboxPath

stringByAppendingPathComponent:@"Documents"];/

這樣直接拼接上去的話,可能會在未來的傳送系統上發生改變。

往檔案中寫入資料的方法:[data writeToFile:FileName

atomically:YES];//將NSData型別物件data寫入檔案,檔名為FileName

從檔案中讀出資料:

NSData data=[NSData

dataWithContentsOfFile:FileName options:0 error:NULL];//從FileName中讀取出資料

2關於sqllite和coredata還有第三方框架(資料庫的東西)以後備用

www.cocoachina.com/ios/2014111…

3關於4中資料儲存注意的細節問題:

plist:呼叫物件的writeToFile:...方法就可以寫入檔案

呼叫物件的...WithContentOfFile方法就可以從檔案中讀取物件內容

偏好設定:本質還是plist屬性列表的方式進行儲存

只能儲存到一個資料夾中,不能儲存大量的資料

nscoding:(歸檔/解檔)物件遵循nscoding協議,如果父類也要歸檔解當,必須呼叫父類的!

系統會自動呼叫,(將物件寫入檔案之前,或者物件讀出之前)

3、NSUserDefautls將資料儲存在什麼地方?

NSUserDefaults的檔案就在Library(存檔資料夾,儲存使用者的配置)下的Preferences偏好設定檔案中。Documents放不可再生的配置檔案,Library放可再生的資料檔案,temp資料夾在系統記憶體不夠或者關機開機的時候會自動清除。Library下面還有一個Caches?就是硬碟快取的位置,而且Library上一層的資料夾居然就是沙盒。讓我驚呆了,有沒有?所以現在理解為什麼說刪除沙盒也可以刪除NSUserDefaults的檔案了吧!更關鍵的是Caches與Prefereces同輩分,而NSUserDefault居然存在Prefereces的Plist配置檔案的子檔案中。簡直就是URL快取的孫子輩了!

文/W378736045(簡書作者)

原文連結:http://www.jianshu.com/p/4d37bdef682d

著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。

本質上來說,userDefaults算是plist的一個分支子資料夾罷了。如果想要刪掉的話,用removeObjectForKey或者刪掉沙盒,也就是你的應用程式然後重新安裝就可以清空userDefaults裡的鍵值對

快取的應用場景?

由於get請求一般只是查詢資料,post請求一般發大量資料給伺服器處理,因此一般只是需要對get請求做快取處理。

以下部分有時間在研究!

5、如何使用NSURLCache類進行URL快取?

1、使用方法?

使用之前首先必須明白使用NSURLCache類進行快取的原理,每一個網路請求都有一個對應的網路快取迴應類,要想對某個GET請求進行資料快取,非常簡單,只需輸入URL引數類方法建立一個可變的網路請求物件,然後設定物件的快取策略屬性(判斷有無快取執行不同的操作,包括使用快取、重新請求、不再請求等),系統就會自動利用NSURLCache將GET請求到的資料快取到記憶體快取裡。記住喲!一定是儲存到了記憶體快取之中!

2、快取策略?

對於不同的資料型別應該使用不同的快取策略,需要及時更新的資料不能用快取!比如股票、彩票資料。固定頻率更新的資料可以定期更改快取策略或者清除快取來提高程式的響應速度。

快取策略主要包括:1、忽略快取每次重新請求2、不存在Data資料才重新請求3、要麼直接返回失敗要麼只使用快取的Data資料,離線狀態4、大多數情況下的快取策略都是先驗證本地資料和遠端資料是否相同,同則快取不同則重新請求。

3、清除快取?

清除快取的前提是我們必須先要通過NSURLCache類建立一個單例類物件,然後再通過這個快取的單例類呼叫相應的Remove方法來消除快取。尤其注意,快取類居然是一個單例類。

6、iOS

5之前只支援記憶體快取,同時支援記憶體快取和硬碟快取是什麼概念?也就是快取原理?

首先來說,如果是應用第一次從網路請求資料,手機應用的硬碟快取是沒有資料的,記憶體快取中也沒有資料。當應用對伺服器的資料庫進行資料請求,請求到資料之後首先會將請求到的資料進行解析和顯示,只要解析後顯示到了螢幕上,記憶體快取中便有了資料,然後再將伺服器的資料快取到手機的硬碟記憶體也就是沙盒中,只要程式繼續執行,記憶體快取便一直會有資料,除非程式終止關閉。我理解的是,所謂記憶體快取就是通過程式碼建立的資料庫進行的資料儲存,只要執行在記憶體中的程式讀取了硬碟快取裡的資料,那麼記憶體快取就開始有資料,當然記憶體快取會隨著程式的關閉而消失。我們還記得那個Library裡的Cache資料夾吧,那裡面就是硬碟快取的位置。沒想到既然跟NSUserDefault存放在一個資料夾。

相關文章