一、什么是sandbox
每個iOS應(yīng)用都被限制在“沙盒”中,“沙盒”相當于一個加了僅主人可見權(quán)限的文件夾,蘋果對沙盒主要有以下限制。
1、應(yīng)用程序可以在自己的沙盒里運作,但是不能訪問任何其他應(yīng)用程序的沙盒
2、應(yīng)用程序間不能共享數(shù)據(jù),沙盒里的文件不能被復(fù)制到其他應(yīng)用程序文件夾中,也不能把其他應(yīng)用程序文件夾中的文件復(fù)制到沙盒里。
3、蘋果禁止任何讀、寫沙盒以外的文件,禁止應(yīng)用程序?qū)?nèi)容寫到沙盒以外的文件夾中。
4、 iOS應(yīng)用程序的沙盒中包括三個文件夾:
Documents
Apple官方建議將程序中建立的或程序瀏覽的文件數(shù)據(jù)都保存在Documents目錄里,iTunes備份數(shù)據(jù)時或恢復(fù)數(shù)據(jù)時,會備份或恢復(fù)此目錄;
Library
主要存儲的是默認的設(shè)置或其它的狀態(tài)信息。包含以下兩個文件夾:
Caches
存儲緩存文件,存儲應(yīng)用程序再次啟動所需的,itunes不會備份該目錄;
Preferences
存儲應(yīng)用程序偏好設(shè)置文件,一般不修改這里存放的文件;
tmp
提供的是一個存儲臨時文件的地方。iPhone一旦重啟tmp目錄下的內(nèi)容就會被清空。
二、如何獲取沙盒路徑
1、獲取沙盒根目錄
(1)、通過NSStringNSHomeDirectory(void)直接獲取 NSString homePath =NSHomeDirectory(); (2)、通過NSStringNSHomeDirectoryForUser(NSStringuserName)獲取
NSString *userName =NSUserName();
NSString *homePath2 = NSHomeDirectoryForUser(userName);
2、獲取沙盒其他文件路徑 Documents、Library、Caches通過一下方法進行搜索: NSArray*NSSearchPathForDirectoriesInDomains(NSSearchPathDirectorydirectory, NSSearchPathDomainMaskdomainMask, BOOL expandTilde)方法:
NSSearchPathDirectory,枚舉值,制定搜索沙盒中的子目錄
NSSearchPathDomainMask, 枚舉值,指定搜索范圍
expandTilde,是否顯示全路徑
①獲取Documents路徑
NSArray *arrayOfDocPath =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *docPath = [arrayOfDocPath objectAtIndex:0];
②獲取Library路徑
NSArray *arrayOfLibPath =NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES);
NSString *libPath = [arrayOfLibPath objectAtIndex:0];
③獲取Caches路徑
NSArray *arrayOfCache =NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
NSString *cachesPath = [arrayOfCache objectAtIndex:0];
④獲取Preferences路徑
NSString *prePath = [libPathstringByAppendingPathComponent:@"Preferences"];
//通過Library路徑拼接上文件夾名,一般不會讀取、修改該文件夾下的文件
⑤獲取tmp路徑
NSString *temPath =NSTemporaryDirectory();
⑥獲取app目錄
NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
⑦獲取app中資源文件路徑
NSString *imgPath = [[NSBundle mainBundle] pathForResource:@"01loading.png" ofType:nil];
//該方法還有多個其他形式