每一個iOS應用都有本身的應用沙盒(應用沙盒就是文件系統目錄),與其餘文件系統隔離。應用必須待在本身的沙盒裏,其餘應用不能訪問該沙盒。app
模擬器應用沙盒的根路徑在: (apple是用戶名, 6.0是模擬器版本)函數
/Users/apple/Library/Application Support/iPhone Simulator/6.0/spa
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
獲取沙盒根目錄:
NSString *home = NSHomeDirectory();
獲取文件目錄:(2種方式):
方法一:利用沙盒根目錄拼接字符串
例如:獲取「Documents」文件夾完整目錄
NSString *home = NSHomeDirectory();
NSString *documents =
[home stringByAppendingPathComponent:@"Documents"];//獲取其餘幾個目錄也相似
其中stringByAppendingPathComponent方法能夠直接在Documents前拼上斜槓。
不建議採用,由於新版本的操做系統可能會修改目錄名
方法二:利用NSSearchPathForDirectoriesInDomains函數:
獲取根目錄:
NSString *homeDir = NSHomeDirectory();
獲取Documents目錄路徑:
NSArray *paths
= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];//由於知足條件的只可能有一個
獲取Caches目錄路徑:
NSArray *paths
= NSSearchPathForDirectoriesInDomains(NSCachesDirectory,
NSUserDomainMask, YES);
NSString *cachesDir = [paths objectAtIndex:0];
獲取tmp目錄路徑:
NSString *tmpDir = NSTemporaryDirectory();
4、獲取應用程序程序包中資源
例如:獲取程序包中一個圖片資源(apple.png)路徑的方法:
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@」apple」 ofType:@」png」];
UIImage *appleImage = [[UIImage alloc] initWithContentsOfFile:imagePath];
代碼中的mainBundle類方法用於返回一個表明應用程序包的對象。