1、應用沙盒概述app
每一個iOS應用都有本身的應用沙盒(應用沙盒就是文件系統目錄),與其餘文件系統隔離。應用必須待在本身的沙盒裏,其餘應用不能訪問該沙盒。函數
應用沙盒的文件系統目錄,以下圖所示(假設應用的名稱叫Layer)。操作系統
模擬器應用沙盒的根路徑在: (apple是用戶名, 6.0是模擬器版本)遊戲
/Users/apple/Library/Application Support/iPhone Simulator/6.0/資源
Applications字符串
【備註】默認狀況下,模擬器的目錄是隱藏的,要想顯示出來,須要在Mac終端輸入下面的命令:同步
顯示Mac隱藏文件的命令:defaults write com.apple.finder AppleShowAllFiles YES。string
隱藏Mac隱藏文件的命令:defaults write com.apple.finder AppleShowAllFiles NO。it
輸完單擊Enter鍵,退出終端,從新啓動Finder就能夠了io
重啓Finder:鼠標單擊窗口左上角的蘋果標誌-->強制退出-->Finder-->從新啓動。
2、應用沙盒結構分析
應用程序包:(上圖中的Layer)包含了全部的資源文件和可執行文件。
Documents:保存應用運行時生成的須要持久化的數據,iTunes同步設備時會備份該目錄。例如,遊戲應用可將遊戲存檔保存在該目錄。
tmp:保存應用運行時所需的臨時數據,使用完畢後再將相應的文件從該目錄刪除。應用沒有運行時,系統也可能會清除該目錄下的文件。iTunes同步設備時不會備份該目錄。
Library/Caches:保存應用運行時生成的須要持久化的數據,iTunes同步設備時不會備份該目錄。通常存儲體積大、不須要備份的非重要數據。
Library/Preference:保存應用的全部偏好設置,iOS的Settings(設置)應用會在該目錄中查找應用的設置信息。iTunes同步設備時會備份該目錄。
總結:
一、體積大(itunes不會備份)
(1) tmp(裏面的內容可能會被系統隨機清除)
(2) Library/Caches
二、體積小(itunes會備份)
(1) Documents
(2) Library/Preference
3、應用沙盒目錄的常見獲取方式
獲取沙盒根目錄:
NSString *home = NSHomeDirectory();
獲取Documents:(2種方式):
(1)利用沙盒根目錄拼接」Documents」字符串
NSString *home = NSHomeDirectory();
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類存取該目錄下的設置信息。