iOS系統中,每個應用都有自己的沙盒,且應用只能訪問其對應的沙盒目錄下面的文件。當然,在用戶授權的情況下,應用也可以訪問其他目錄下面的文件。比如,用戶授權情況下,應用可以訪問相冊、通訊錄。在開發中,經常會涉及到 iOS 沙盒目錄,比如讀寫文件,歸檔解檔等。
一:沙盒的目錄結構
app的沙盒目錄結構如下圖:
可知,沙盒目錄下有三個文件夾:Documents、Library、Temp。其中,Library下面有兩個文件夾,分別是 Preferences 和 Caches。
二:每個目錄下存放的文件
1: Documents 目錄:用來存儲用戶數據,應該將所有的應用程序數據文件寫入到該目錄下。
2:Library 目錄:(1)Preferences 目錄:包含應用程序的偏好設置文件 (2)Caches 目錄:用於存放應用程序專用的支持文件,保存應用程序再次啓動過程中需要的信息。
3:Temp目錄:用於存放臨時文件,保存應用程序再次啓動過程中不需要的信息。
三:獲取沙盒目錄的方法
獲取沙盒目錄路徑可以通過 NSSearchPathForDirectoriesInDomains 方法,該方法有三個參數:
1:directory NSSearchPathDirectory類型的enum值,表情要搜索的目錄名稱。
2:domainMask NSSearchPathDomainMask類型的enum值,指定搜索範圍。通常情況下是NSUserDomainMask,表示搜索的範圍限制於當前應用的沙盒目錄。
3:expandTilde Bool值,表示返回的路徑中是否展開~。如果是YES,表示展開,NO表示不展開。
獲取沙盒目錄路徑的代碼:
// 獲取沙盒主目錄路徑 NSString *homeDir = NSHomeDirectory(); // 獲取Documents目錄路徑 NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]; // 獲取Library的目錄路徑 NSString *libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]; // 獲取Caches目錄路徑 NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; // 獲取tmp目錄路徑 NSString *tmpDir = NSTemporaryDirectory();
第三個參數爲YES時的示例路徑:
/var/mobile/Applications/DBAC1849-CF0A-435A-98FB-A7472C73EC42/Library/Caches/letuAllClassifyString.plist第三個參數爲NO時的示例路徑:
~/Library/Caches/letuAllClassifyString.plist