iOS應用都被限制在「沙盒」中,「沙盒」至關於一個加了僅主人可見權限的文件夾,蘋果對沙盒有如下幾條限制。ios
(1)、應用程序能夠在本身的沙盒裏運做,可是不能訪問任何其餘應用程序的沙盒。緩存
(2)、應用程序間不能共享數據,沙盒裏的文件不能被複制到其餘應用程序文件夾中,也不能把其餘應用程序文件夾中的文件複製到沙盒裏。安全
(3)、蘋果禁止任何讀、寫沙盒之外的文件,禁止應用程序將內容寫到沙盒之外的文件夾中。atom
(4)、沙盒根目錄裏有三個文件夾:Documents,通常應該把應用程序的數據文件存到這個文件夾裏,用於存儲用.net
沙盒就是應用程序的安裝過程當中、系統爲每一個單獨的應用程序生成它的主目錄和一些關鍵的子目錄 —文件夾orm
沙盒機制是一種安全體系,它規定了應用程序只能在本應用程序沙盒中讀取文件,不能夠訪問其餘地方的內容。全部的非代碼文件都保存在這個地方,好比圖片、音頻、視頻、屬性列表(偏好設置)和文本文件等。視頻
優勢 安全 每一個應用程序都在本身的沙盒內 不能隨意跨越本身的沙盒區訪問別的應用程序沙盒的內容,應用程序向外請求或接受數據都須要通過權限認證遊戲
缺點 文件訪問受限 訪問文件不靈活圖片
怎麼去到沙盒下?文檔
首先在代碼中打印沙盒路徑,
NSLog(@"路徑%@",NSHomeDirectory());
運行代碼,控制檯輸出:
在finder中command+shift+g 前往文件夾把輸出它打印的沙盒路徑
如上圖咱們看到的NSHomeDirectory() // 程序主目錄,可見子目錄(3個):Documents、Library、tmp,library下有caches,he
Documents :保存應用運行時生成的須要持久化的數據,iTunes同步設備時 會備份該目錄 。例如,遊戲應用可將遊戲存檔保存在該目錄
tmp :保存應用運行時所需的 臨時數據 ,使用完畢後再將相應的文件從該目錄刪除。應用沒有運行時,系統也可能會清除該目錄下的文件。iTunes同步設備時不會備份該目錄
Library/Caches :保存應用運行時生成的須要持久化的數據,iTunes同步設備時 不會備份該目錄 。通常存儲體積大、不須要備份的非重要數據
Library/Preference :保存應用的全部偏好設置,iOS的Settings(設置)應用會在該目錄中查找應用的設置信息。iTunes同步設備時 會備份該目錄
去沙盒路徑的第一種方法,拿去Documents爲列
[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];其餘的都同樣
第二種方法
[NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSUserDomainMask, YES)[0]; // 程序目錄,不能存任何東西
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];//文檔目錄,須要ITUNES同步備份的數據存這裏,可存放用戶數據
[[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)[0] stringByAppendingFormat:@"/Preference"];// 配置目錄,配置文件存這裏
[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)[0]stringByAppendingFormat:@"/Caches"];//緩存目錄,系統永遠不會刪除這裏的文件,ITUNES會刪除
NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];// 臨時緩存目錄,APP退出後,系統可能會刪除這裏的內容
沙盒路徑下數據的存儲
//存數據
NSString * sandBoxpath = [NSHomeDirectory()stringByAppendingPathComponent:@"/Documents/save"];
NSString * stroeSting =@"yi";
[stroeStingwriteToFile:sandBoxpathatomically:YESencoding:NSUTF8StringEncodingerror:nil];
//取數據
NSString * checkString = [[NSStringalloc]initWithContentsOfFile:[NSHomeDirectory()stringByAppendingPathComponent:@"/Documents/save"]encoding:NSUTF8StringEncodingerror:nil];
NSLog(@"取出的數據是:%@",checkString);
去到沙盒下看下
確實咱們寫入的文件是存在的
看下控制檯打印
2016-06-30 08:52:32.090 Store[814:16463] 取出的數據是:yi
也就是說這個字符串是寫入文件的。