1、應用沙盒概述
每個ios應用都有自己的應用沙盒(應用沙盒就是檔案系統目錄),與其他檔案系統隔離。應用必須待在自己的沙盒裡,其他應用不能通路該沙盒。
應用沙盒的檔案系統目錄,如下圖所示(假設應用的名稱叫layer)。
模拟器應用沙盒的根路徑在: (apple是使用者名, 6.0是模拟器版本)
/users/apple/library/application support/iphone simulator/6.0/
applications
【備注】預設情況下,模拟器的目錄是隐藏的,要想顯示出來,需要在mac終端輸入下面的指令:
顯示mac隐藏檔案的指令:defaults write com.apple.finder appleshowallfiles yes。
隐藏mac隐藏檔案的指令:defaults write com.apple.finder appleshowallfiles no。
輸完單擊enter鍵,退出終端,重新啟動finder就可以了
重新開機finder:滑鼠單擊視窗左上角的蘋果标志-->強制退出-->finder-->重新啟動。
2、應用沙盒結構分析
應用程式包:(上圖中的layer)包含了所有的資源檔案和可執行檔案。
documents:儲存應用運作時生成的需要持久化的資料,itunes同步裝置時會備份該目錄。例如,遊戲應用可将遊戲存檔儲存在該目錄。
tmp:儲存應用運作時所需的臨時資料,使用完畢後再将相應的檔案從該目錄删除。應用沒有運作時,系統也可能會清除該目錄下的檔案。itunes同步裝置時不會備份該目錄。
library/caches:儲存應用運作時生成的需要持久化的資料,itunes同步裝置時不會備份該目錄。一般存儲體積大、不需要備份的非重要資料。
library/preference:儲存應用的所有偏好設定,ios的settings(設定)應用會在該目錄中查找應用的設定資訊。itunes同步裝置時會備份該目錄。
總結:
1、體積大(itunes不會備份)
(1) tmp(裡面的内容可能會被系統随機清除)
(2) library/caches
2、體積小(itunes會備份)
(1) documents
(2) library/preference
3、應用沙盒目錄的常見擷取方式
擷取沙盒根目錄:
nsstring *home = nshomedirectory();
擷取documents:(2種方式):
(1)利用沙盒根目錄拼接”documents”字元串
nsstring *documents =
[home stringbyappendingpathcomponent:@"documents"];
其中stringbyappendingpathcomponent方法可以直接在documents前拼上斜杠。
不建議采用,因為新版本的作業系統可能會修改目錄名
(2)利用nssearchpathfordirectoriesindomains函數:
nsuserdomainmask代表從使用者檔案夾下找,yes代表展開路徑中的波浪字元“~”
nsarray *array =
nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, no);
在ios中,隻有一個目錄跟傳入的參數比對,是以這個集合裡面隻有一個元素:
nsstring *documents = [array objectatindex:0];
擷取tmp:
nsstring *tmp = nstemporarydirectory();
擷取library/caches:(跟documents類似的2種方法):
(1)利用沙盒根目錄拼接”caches”字元串。
(2)利用nssearchpathfordirectoriesindomains函數(将函數的第2個參數改為:nscachesdirectory即可)。
library/preference:
通過nsuserdefaults類存取該目錄下的設定資訊。