1.沙盒結(jié)構(gòu)
出于安全考慮可免,iOS
應(yīng)用都只能訪(fǎng)問(wèn)自己沙盒內(nèi)的文件捂寿,想要其它權(quán)限都要預(yù)先申請(qǐng)酌畜。
-
Documents
:應(yīng)用中用戶(hù)數(shù)據(jù)可以放在這里帚稠,但是基于NSUserDefaults 的首選項(xiàng)設(shè)置除外,iTunes 備份和恢復(fù)的時(shí)候會(huì)包括此目錄. -
Library/Caches
:存放緩存文件,iTunes 不會(huì)備份此目錄床佳,此目錄下文件不會(huì)在應(yīng)用退出刪除. -
tmp
:存放臨時(shí)文件滋早,iTunes 不會(huì)備份和恢復(fù)此目錄,此目錄下文件可能會(huì)在應(yīng)用退出后刪除.
2.如何訪(fǎng)問(wèn):
NSString *path = NSHomeDirectory();
上面的代碼得到的是應(yīng)用程序目錄的路徑砌们,
在該目錄下有三個(gè)文件夾:Documents
杆麸、Library
、temp
以及一個(gè).app
包浪感。
該目錄下就是應(yīng)用程序的沙盒昔头,應(yīng)用程序只能訪(fǎng)問(wèn)該目錄下的文件夾。
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)
FOUNDATION_EXPORT NSArray<NSString *> *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde);
此方法用于查找目錄影兽,返回指定范圍內(nèi)的指定名稱(chēng)的目錄的路徑集合
已經(jīng)習(xí)慣了蘋(píng)果爸爸的黑魔法揭斧,Cocoa
最糟糕的 API
之一。
它返回了一個(gè)包含用戶(hù)文檔目錄作為第一個(gè)元素的數(shù)組峻堰,
還好 NSArray -firstObject
可以輕松拿到地址讹开。
參數(shù):
-
NSSearchPathDirectory directory
要搜索的目標(biāo)目錄 比如NSDocumentDirectory
表明我們要搜索的是Documents
目錄。 -
NSSearchPathDomainMask domainMask
指定搜索范圍NSUserDomainMask
當(dāng)前應(yīng)用沙盒捐名。 -
BOOL expandTilde
是否全部展開(kāi)旦万,不展開(kāi)會(huì)有~
比如~/Library/Caches
醬紫。
3.一些常見(jiàn)用法:
// 獲取沙盒主目錄路徑
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();