面試的時候經常會問到沙盒,在項目中經常用到,但是讓自己說的時候往往沒在太關注,所以經常忘記。今天自己就總結了一下。有什麼遺漏可以直接給我提出來,大恩不言謝了。
1.什麼是SandBox?
IOS中的沙盒機制(SandBox)是一種安全體系,它規定了應用程序只能在爲該應用創建的文件夾內讀取文件,不可以訪問其他地方的內容。所有的非代碼文件都保存在這個地方,比如圖片、聲音、屬性列表和文本文件等。
1. 每一個應用程序都在自己的沙盒當中。
2. 每一個應用程序不能跨越自己的沙盒去訪問別的沙盒。這樣保證了系統的安全性。
3. 每一個程序向外請求或接收數據都需要經過權限認證
2.沙盒(SandBox)文件目錄
每個沙盒下面都有相似的目錄結構,如下圖所示(出自蘋果官方文檔):
這是官方文檔裏面的一張圖,通過直接點擊Finder圖標右鍵——前往文件夾——輸入~/Library/Application Support/iPhone Simulator/ 就可以進入沙盒目錄下。
默認情況下,每個沙盒含有3個文件夾:Documents, Library 和 tmp。因爲應用的沙盒機制,應用只能在幾個目錄下讀寫文件
Documents:蘋果建議將程序中建立的或在程序中瀏覽到的文件數據保存在該目錄下,iTunes備份和恢復的時候會包括此目錄
Library:存儲程序的默認設置或其它狀態信息;
Library/Caches:存放緩存文件,iTunes不會備份此目錄,此目錄下文件不會在應用退出刪除
tmp:提供一個即時創建臨時文件的地方iTunes在與iPhone同步時,備份所有的Documents和Library文件。iPhone在重啓時,會丟棄所有。的tmp文件。
3.下面通過代碼來獲取這些目錄
//1 獲取]文件夾主目錄
NSString *mhomePath = NSHomeDirectory();
NSLog(@"Home目錄:%@",mhomePath);
//2 獲取Documents文件夾目錄,第一個參數是說明獲取Doucments文件夾目錄,第二個參數說明是在當前應用沙盒中獲取,所有應用沙盒目錄組成一個數組結構的數據存放
NSArray *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsPath = [docPath objectAtIndex:0];
NSLog(@"Documents目錄:%@",documentsPath);
//3 獲取Cache目錄
NSArray *cacPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [cacPath objectAtIndex:0];
NSLog(@"Cache目錄:%@",cachePath);
//4 Library目錄
NSArray *libsPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libPath = [libsPath objectAtIndex:0];
NSLog(@"Library目錄:%@",libPath);
//5 temp目錄
NSString *tempPath = NSTemporaryDirectory();
NSLog(@"temp目錄:%@",tempPath);
打印出來爲: