天天看點

iOS開發之應用沙盒

1、應用沙盒概述

每個ios應用都有自己的應用沙盒(應用沙盒就是檔案系統目錄),與其他檔案系統隔離。應用必須待在自己的沙盒裡,其他應用不能通路該沙盒。

應用沙盒的檔案系統目錄,如下圖所示(假設應用的名稱叫layer)。

iOS開發之應用沙盒

模拟器應用沙盒的根路徑在: (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類存取該目錄下的設定資訊。