出於安全考慮,iOS系統的沙盒機制規定每個應用都只能訪問當前沙盒目錄下的文件(也有例外,比如系統通訊錄能在用戶授權的情況下被第三方應用訪問),這個規則把iOS系統封閉性展現的淋漓盡致。
a.沙盒中幾個主要的目錄
1.MyApp.app 2.Documents 3.Library 4.tmp
NSLog(@" %@ ",NSTemporaryDirectory());
NSLog(@" %@ ",[[NSBundle mainBundle] bundlePath]);
NSLog(@" %@ ",NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES));
NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSLog(@" %@ ",[array objectAtIndex:0]);
2014-11-13 19:36:14.475 DataSaveDemo[30321:226572] /Users/wing/Library/Developer/CoreSimulator/Devices/84D052CE-D301-4C65-AA41-C52ACA38C327/data/Containers/Data/Application/4724245E-E912-43EE-8E15-7195E63F3CEC/tmp/
2014-11-13 19:36:14.476 DataSaveDemo[30321:226572] /Users/wing/Library/Developer/CoreSimulator/Devices/84D052CE-D301-4C65-AA41-C52ACA38C327/data/Containers/Bundle/Application/A379FC9E-6089-4E2E-97C0-338FDD52E6ED/DataSaveDemo.app
2014-11-13 19:36:14.476 DataSaveDemo[30321:226572] (
"/Users/wing/Library/Developer/CoreSimulator/Devices/84D052CE-D301-4C65-AA41-C52ACA38C327/data/Containers/Data/Application/4724245E-E912-43EE-8E15-7195E63F3CEC/Documents"
)
2014-11-13 19:36:14.477 DataSaveDemo[30321:226572] /Users/wing/Library/Developer/CoreSimulator/Devices/84D052CE-D301-4C65-AA41-C52ACA38C327/data/Containers/Data/Application/4724245E-E912-43EE-8E15-7195E63F3CEC/Documents
備註:該方法用於返回指定範圍內的指定名稱的目錄的路徑集合。有三個參數:directoryNSSearchPathDirectory類型的enum值,表明我們要搜索的目錄名稱,比如這裏用NSDocumentDirectory表明我們要搜索的是Documents目錄。如果我們將其換成NSCachesDirectory就表示我們搜索的是Library/Caches目錄。domainMaskNSSearchPathDomainMask類型的enum值,指定搜索範圍,這裏的NSUserDomainMask表示搜索的範圍限制於當前應用的沙盒目錄。還可以寫成NSLocalDomainMask(表示/Library)、NSNetworkDomainMask(表示/Network)等。expandTildeBOOL值,表示是否展開波浪線~。我們知道在iOS中~的全寫形式是/User/userName,該值爲YES即表示寫成全寫形式,爲NO就表示直接寫成“~”。