1.沙盒結(jié)構(gòu)
出于安全考慮,iOS 應(yīng)用都只能訪問自己沙盒內(nèi)的文件,想要其它權(quán)限都要預(yù)先申請。

sandbox.png
-
Documents:應(yīng)用中用戶數(shù)據(jù)可以放在這里,但是基于NSUserDefaults 的首選項(xiàng)設(shè)置除外,iTunes 備份和恢復(fù)的時候會包括此目錄. -
Library/Caches:存放緩存文件,iTunes 不會備份此目錄,此目錄下文件不會在應(yīng)用退出刪除. -
tmp:存放臨時文件,iTunes 不會備份和恢復(fù)此目錄,此目錄下文件可能會在應(yīng)用退出后刪除.
2.如何訪問:
NSString *path = NSHomeDirectory();
上面的代碼得到的是應(yīng)用程序目錄的路徑,
在該目錄下有三個文件夾:Documents、Library、temp以及一個.app包。
該目錄下就是應(yīng)用程序的沙盒,應(yīng)用程序只能訪問該目錄下的文件夾。
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)
FOUNDATION_EXPORT NSArray<NSString *> *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde);
此方法用于查找目錄,返回指定范圍內(nèi)的指定名稱的目錄的路徑集合
已經(jīng)習(xí)慣了蘋果爸爸的黑魔法,Cocoa 最糟糕的 API 之一。
它返回了一個包含用戶文檔目錄作為第一個元素的數(shù)組,
還好 NSArray -firstObject 可以輕松拿到地址。
參數(shù):
-
NSSearchPathDirectory directory要搜索的目標(biāo)目錄 比如NSDocumentDirectory表明我們要搜索的是Documents目錄。 -
NSSearchPathDomainMask domainMask指定搜索范圍NSUserDomainMask當(dāng)前應(yīng)用沙盒。 -
BOOL expandTilde是否全部展開,不展開會有~比如~/Library/Caches醬紫。
3.一些常見用法:
// 獲取沙盒主目錄路徑
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();