iOS開發之應用沙盒

每一個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:保存應用的全部偏好設置,iOSSettings(設置)應用會在該目錄中查找應用的設置信息。iTunes同步設備時備份該目錄。

總結:

1、體積大(itunes不會備份)

1 tmp(裏面的內容可能會被系統隨機清除)

2 Library/Caches

2、體積小(itunes會備份)

1 Documents

2 Library/Preference

3應用沙盒目錄的常見獲取方式

獲取沙盒根目錄

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類方法用於返回一個表明應用程序包的對象。

相關文章
相關標籤/搜索