iOS系統(tǒng)中,每個(gè)應(yīng)用都有自己的沙盒赡模,且應(yīng)用只能訪問(wèn)其對(duì)應(yīng)的沙盒目錄下面的文件田炭。當(dāng)然,在用戶(hù)授權(quán)的情況下漓柑,應(yīng)用也可以訪問(wèn)其他目錄下面的文件教硫。比如叨吮,用戶(hù)授權(quán)情況下,應(yīng)用可以訪問(wèn)相冊(cè)瞬矩、通訊錄茶鉴。在開(kāi)發(fā)中,經(jīng)常會(huì)涉及到 iOS 沙盒目錄景用,比如讀寫(xiě)文件涵叮,歸檔解檔等。
一:沙盒的目錄結(jié)構(gòu)
app的沙盒目錄結(jié)構(gòu)如下圖:
可知伞插,沙盒目錄下有三個(gè)文件夾:Documents割粮、Library、Temp媚污。其中舀瓢,Library下面有兩個(gè)文件夾,分別是 Preferences 和 Caches耗美。
二:每個(gè)目錄下存放的文件
1: Documents 目錄:用來(lái)存儲(chǔ)用戶(hù)數(shù)據(jù)京髓,應(yīng)該將所有的應(yīng)用程序數(shù)據(jù)文件寫(xiě)入到該目錄下。
2:Library 目錄:(1)Preferences 目錄:包含應(yīng)用程序的偏好設(shè)置文件 (2)Caches 目錄:用于存放應(yīng)用程序?qū)S玫闹С治募碳埽4鎽?yīng)用程序再次啟動(dòng)過(guò)程中需要的信息朵锣。
3:Temp目錄:用于存放臨時(shí)文件,保存應(yīng)用程序再次啟動(dòng)過(guò)程中不需要的信息甸私。
三:獲取沙盒目錄的方法
獲取沙盒目錄路徑可以通過(guò) NSSearchPathForDirectoriesInDomains 方法诚些,該方法有三個(gè)參數(shù):
1:directory NSSearchPathDirectory類(lèi)型的enum值,表情要搜索的目錄名稱(chēng)皇型。
2:domainMask NSSearchPathDomainMask類(lèi)型的enum值诬烹,指定搜索范圍。通常情況下是NSUserDomainMask,表示搜索的范圍限制于當(dāng)前應(yīng)用的沙盒目錄弃鸦。
3:expandTilde Bool值绞吁,表示返回的路徑中是否展開(kāi)~。如果是YES唬格,表示展開(kāi)家破,NO表示不展開(kāi)。
獲取沙盒目錄路徑的代碼:
// 獲取沙盒主目錄路徑
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();
第三個(gè)參數(shù)為YES時(shí)的示例路徑:
/var/mobile/Applications/DBAC1849-CF0A-435A-98FB-A7472C73EC42/Library/Caches/letuAllClassifyString.plist
第三個(gè)參數(shù)為NO時(shí)的示例路徑:
~/Library/Caches/letuAllClassifyString.plist