標籤:
iOS APP可以在自己的沙箱裡讀寫檔案,但是,不可以訪問其他APP的沙箱。每一個APP都是一個資訊孤島,相互是不可以進行通訊的,唯獨可以通過URL Scheme。沙箱裡面的檔案可以是照片、音效檔、文本、屬性列表等。
沙箱機制簡介
沙箱簡述:
每一個APP都有一個儲存空間,就是沙箱。
APP之間不能相互連信。
沙箱根目錄結構:Documents、Library、temp。
簡述一下Documents、Library、temp的區別:
Documents:用於儲存使用者資料,iTunes備份和恢複的時候會包括此目錄,所以,蘋果建議將程式中建立的或在程式中瀏覽到的檔案資料儲存在該目錄下。
Library:包含兩個子目錄:Caches 和 Preferences。Caches用來存放使用者需要換成的檔案。Preferences是APP的喜好設定,可以通過NSUserDefaults來讀取和設定。
tmp: 用於存放臨時檔案,這個可以放一些當APP退出後不再需要的檔案。
開啟模擬器沙箱方法
方法一:前往檔案夾開啟
/Users/ligang/Library/Application Support/iPhone Simulator/
直接在Finder->前往->前往檔案夾,輸入上面的內容即可。記住將ligang換成你的電腦使用者名稱。
方法二:通過Finder一步步尋找
模擬器上的APP的沙箱實在使用者目錄下的資產庫裡面,但是資產庫是隱藏檔案夾。所以查看沙箱之前,現將隱藏檔案夾顯示出來。顯示隱藏檔案的命令:
defaults write com.apple.finder AppleShowAllFiles -bool true
用心的童鞋會發現,隱藏隱藏檔案的命令:
defaults write com.apple.finder AppleShowAllFiles -bool false
尋找步驟請看圖:
關於沙箱機制(SandBox)的介紹大概就是這樣,以後面試的時候萬一碰到你就可以這麼回答。
擷取沙箱根目錄
擷取沙箱根目錄,直接調用NSHomeDirectory():
//擷取沙箱根目錄NSString *directory = NSHomeDirectory();NSLog(@"directory:%@", directory);
控制台輸出:
2015-07-22 00:40:16.185 iOSStrongDemo[1605:555658] directory:/var/mobile/Containers/Data/Application/F9418815-51A9-4A0A-A76C-6FD37C400928
這個是真機的路徑,大家有時間的話可以看看模擬器的根目錄路徑。
擷取Documents路徑
擷取Documents路徑如下:
//擷取Documents路徑NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *path = [paths objectAtIndex:0];NSLog(@"path:%@", path);
控制台輸出:
2015-07-22 00:41:41.397 iOSStrongDemo[1613:556159] path:/var/mobile/Containers/Data/Application/A62B886B-A8F0-4215-B59D-1F505C3997BD/Documents
擷取Documents檔案夾目錄,第一個參數是說明擷取Doucments檔案夾目錄,第二個參數說明是在當前應用沙箱中擷取。
擷取Library路徑
//擷取Library路徑NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);NSString *path = [paths objectAtIndex:0];NSLog(@"path:%@", path);
控制台輸出:
2015-07-22 00:43:15.803 iOSStrongDemo[1619:556638] /var/mobile/Containers/Data/Application/17300507-4643-4DE7-BC68-E13DB19C8D98/Library
擷取Caches路徑
//擷取Caches路徑NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);NSString *path = [paths objectAtIndex:0];NSLog(@"path:%@", path);
控制台輸出:
2015-07-22 00:44:31.383 iOSStrongDemo[1626:557083] path:/var/mobile/Containers/Data/Application/1E945B52-E29D-4041-A489-1AA1B11BB960/Library/Caches
擷取tmp路徑
NSString *tmp = NSTemporaryDirectory();NSLog(@"tmp:%@", tmp);
控制台輸出:
2015-07-22 00:46:07.846 iOSStrongDemo[1632:557537] tmp:/private/var/mobile/Containers/Data/Application/4BE02307-1CC5-47E8-BEA8-CEBB7ED5A402/tmp/
以上是iOS開發中擷取沙箱路徑的方法,也許還有更好的擷取方法等待我們去發現。後面我們還會講到關於在沙箱裡進行讀寫檔案操作。
iOS之沙箱機制和如何擷取沙箱路徑