LearnHouse

[轉]iOS的沙盒機制(SandBox)

轉貼來源:

http://www.superqq.com/blog/2015/07/20/ioskai-fa-zhi-sha-he-ji-zhi-%28sandbox/
http://www.superqq.com/blog/2015/07/22/ioskai-fa-zhi-huo-qu-sha-he-lu-jing

iOS APP可以在自己的沙盒裡讀寫文件,但是,不可以訪問其他APP的沙盒。每一個APP都是一個信息孤島,相互是不可以進行通信的,唯獨可以通過URL Scheme。沙盒裡面的文件可以是照片、聲音文件、文本、屬性列表等。

沙盒機制簡介

沙盒簡述:

  1. 每一個APP都有一個存儲空間,就是沙盒。
  2. APP之間不能相互通信。
  3. 沙盒根目錄結構:Documents、Library、temp。

簡述一下Documents、Library、tmp的區別:

  1. Documents:用於存儲用戶數據,iTunes備份和恢復的時候會包括此目錄,所以,蘋果建議將程序中建立的或在程序中瀏覽到的文件數據保存在該目錄下。
  2. Library:包含兩個子目錄:Caches 和 Preferences。Caches用來存放用戶需要換成的文件。Preferences是APP的偏好設置,可以通過NSUserDefaults來讀取和設置。
  3. tmp: 用於存放臨時文件,這個可以放一些當APP退出後不再需要的文件。

在開發中,我們需要對沙盒進行操作,所以我們需要獲取到沙盒路徑,接下來我們來講解如何獲取Documents、Library、tmp的路徑。

獲取沙盒根目錄

獲取沙盒根目錄,直接調用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/Applicat

posted by admin in 程式&軟體 and have No Comments

Place your comment

Please fill your data and comment below.
Name
Email
Website
Your comment