iOS數據存儲之應用程序沙盒

應用程序沙盒

iOS應用程序只能在系統為該應用所分配的文件區域下讀/寫文件,這個文件區域就是沙盒.
沙盒機制:一種安全機制,保證每個應用程序只能訪問本沙盒內的數據,避免與其他應用發生沖突.
查看沙盒:Finder :shift + comand+ g快速到指定路徑(獲取方法_通過xcode打印NSHomeDirectory())
示例路徑:/Users/用戶名/Library/Developer/CoreSimulator/Devices/7413FCDA-8FD4-49C1-A16C-05E361A68707/data/Containers/Data/Application/18AF754B-F8F3-4DF7-9035-C48C5671BFAB

文件結構:


文件結構
sandbox

相關路徑獲取方法

沙盒路徑

NSString *NSHomeDirectory(void);

Documents目錄

保存應用程序的數據,文件.
一般:數據庫文件,一些常用文件(writeTofile:),網絡下載的文件等等

NSSearchPathForDirectoriesInDomains返回的是符合條件的所有目錄,Mac不太了解,可以看出,這個方法最初是為Mac OS 設計的,Mac OS中NSUserDomainMask代表查看當前用戶的Home目錄,而iOS下只有一個對應的目錄,直接取第一個元素或者最后一個元素即可.第一個參數傳入需要查找的文件夾Documens,第二個參數NSUserDomainMask代表僅搜索應用程序沙盒.

NSString *documentsDirectory(){
    return NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
}

Tep目錄

該目錄供應用程序存儲臨時文件,當iOS執行同步時,iTunes 不會備份tmp目錄下的文件,因此當應用程序不再需要某個臨時文件時,應該負責刪除tmp目錄下的臨時文件,避免占用系統空間.

 NSTemporaryDirectory();

Library

一般Library/Caches存儲緩存數據(NSCache),比如SDWebimage是將圖片存在該文件下.
Library/Preferences存儲用戶偏好設置,即通過NSUserDefault存儲的數據,會建立一個以Bundle identifier.plist命名的文件,在該目錄下.

//Libary
 NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject;
//Caches
NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
    

文件保存

單文件保存:
對于NSArray,NSDictionary 可以通過writeToFile:atomically寫入單個文件,通過arrayWithContentsOfFile:或者dictionaryWithContentsOfFile:讀取集合中的內容.簡單易用,但是每次讀取文件內容總是一次性加載全部文件內容,可能會導致內存緊張,即使改動很小的一部分內容,也需要全部重新寫入文件.
所以,如果應用程序需要保存,讀取的數據量不大,可以使用NSArray,NSDictionary來保存,讀取程序數據.
多文件保存:
可用于保存多個相互關聯性較小的文件內容.可以避免一次性加載,修改需要全部寫入.但是文件過多會容易混亂,需要建立額外的數據結構去管理文件和內容之間的關系.
少量數據,可以采用NSUserdefault或者單文件存儲,當遇到大量數據存儲時,我們需要借助SQLite3或者Core Date來管理數據.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容