每個(gè)App的沙河目錄結(jié)構(gòu), 都如下圖所示:
默認(rèn)情況下, 每個(gè)沙盒含有1個(gè)應(yīng)用程序包和三個(gè)文件夾: Documents, Library和tmp. 因?yàn)樯澈袡C(jī)制, 應(yīng)用只能在這幾個(gè)目錄讀寫文件.
MyApp.app:
應(yīng)用程序包, 這里面存放的是應(yīng)用程序文件, 包括資源文件和可執(zhí)行文件.
訪問路徑:
//object-c
NSString *budlePath = [[NSBundle mainBundle] bundlePath];
//swift
let bundlePath = Bundle.main.bundlePath
Documents:
應(yīng)用程序在運(yùn)行時(shí)生成的一些需要長(zhǎng)久保存的數(shù)據(jù)(比如: 個(gè)人設(shè)置等信息), 通過iTunes, iCloud備份時(shí),會(huì)備份這個(gè)目錄下的數(shù)據(jù), 此目錄下保存相對(duì)重要的數(shù)據(jù).
//object-c
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//swift
let path = NSHomeDirectory() + "/Documents"
let path2 = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)[0]
Library/Caches
從網(wǎng)絡(luò)上下載的文件或數(shù)據(jù)(如: 音樂緩存, 圖片緩存等) , 此目錄下的數(shù)據(jù)不會(huì)自動(dòng)刪除, 需要程序員手動(dòng)清除該目錄下的數(shù)據(jù). ITunes, iCloud備份時(shí)不會(huì)備份此目錄下的數(shù)據(jù).一般用于存儲(chǔ)體積不大, 不需要備份的非重要資源數(shù)據(jù).
//object-c
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString* cachesDirectory = [paths objectAtIndex:0];
//swift
let path = NSHomeDirectory() + "/Library/Caches"
let path2 = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.cachesDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)[0]
Library/Preferences
保存應(yīng)用程序的偏好設(shè)置文件(使用NSUerDefaults類設(shè)置是創(chuàng)建, 不應(yīng)該手動(dòng)創(chuàng)建), iTunes, iCloud備份時(shí)會(huì)備份此目錄下的數(shù)據(jù).該目錄由系統(tǒng)自動(dòng)管理,通常用來儲(chǔ)存一些基本的應(yīng)用配置信息,比如賬號(hào)密碼,自動(dòng)登錄等牙言。
tmp
保存應(yīng)用運(yùn)行時(shí)產(chǎn)生的一些臨時(shí)數(shù)據(jù),應(yīng)用程序退出,系統(tǒng)磁盤空間不夠,手機(jī)重啟時(shí),都會(huì)自動(dòng)清除該目錄的數(shù)據(jù)。無需程序員手動(dòng)清除該目錄中的數(shù)據(jù).iTunes、iCloud備份時(shí),不會(huì)備份次目錄。
//object-c
NSString *tempPath = NSTemporaryDirectory();
//swift
let path = NSTemporaryDirectory()