iOS沙盒路徑及路徑下數據的存儲和讀取

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

 

也就是說這個字符串是寫入文件的。

相關文章
相關標籤/搜索