自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

沙盒SandBox的結構

移動開發(fā) iOS
有時沙盒也叫沙箱,英文sandbox。在計算機領域指一種虛擬技術,且多用于計算機安全技術。其原理是通過重定向技術,把程序生成和修改的文件定向到自身文件夾中。當某個程序試圖發(fā)揮作用時,安全軟件可以先讓它在沙盒中運行,如果含有惡意行為,則禁止程序的進一步運行,而這不會對系統(tǒng)造成任何危害。

在模擬器中運行iOS程序,都會為該程序創(chuàng)建一個沙盒(SandBox)。首先聲明,我用的系統(tǒng)是Max OS X 10.7.3,編譯器是Xcode 4.3.2。想要找到沙盒目錄,先運行Finder,然后在Finder的菜單欄找到前往—前往文件夾…,在打開的窗口輸入

  1. /Users/UserName/Library/Application Support/iPhone Simulator/ 

其中,UserName是指用戶在Mac系統(tǒng)中的用戶名。

點擊“前往”,就來到了模擬器目錄:

上圖中的5.0、5.1就是模擬器的版本。這里打開5.1:

 

上圖中的目錄結構類似于實際的iOS設備中的目錄結構。

Applications目錄就是安裝程序的地方。打開它:

可以看到有兩個文件夾,文件夾的名字很復雜。這兩個文件夾就可以看成是現(xiàn)在安裝在5.1模擬器中的兩個程序。它們的名稱是在Xcode中運行是自動創(chuàng)建的,名稱是隨機產生的全局唯一標識符。這里展開其中第二個文件夾。它就是上篇文章小例子運行時產生的:

如上圖所示,程序中包含三個文件夾:Documents、Library和tmp。

1、Documents:

這個目錄用于存放程序中的數(shù)據(jù),除了那些基于NSUserDefaults的設置數(shù)據(jù)。

獲取程序的Documents目錄的代碼是:

  1. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
  2. NSString *documentsDirectory = [paths objectAtIndex:0]; 

則documentsDirectory中存儲的就是Documents目錄的地址。

2、Library:

這個目錄包含兩個子目錄:Caches與Preferences。

Preferences這個目錄存放的是基于NSUserDefaults的設置數(shù)據(jù),例如上圖中可以看到一個plist文件,它就是我們上次進行的設置項,是Settings程序讀寫的。打開它,可以看到我們上次做的設置是保存在這個文件中的:

2.1 獲取Library目錄地址的代碼與Documents類似:

  1. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); 
  2. NSString *libraryDirectory = [paths objectAtIndex:0]; 

2.2 獲取Caches目錄地址:

  1. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
  2. NSString* cachesDirectory = [paths objectAtIndex:0]; 

3、tmp:

我們可以在這個目錄下存放臨時文件,當設備接到iTunes時,tmp中的數(shù)據(jù)會進行同步。我們的程序應當要負責刪除tmp目錄下的內容。

獲取tmp目錄:

我看很多資料上寫的獲取tmp目錄的方法是:

  1. NSString *tempPath = NSTemporaryDirectory(); 

但是我發(fā)現(xiàn)獲得的卻不是程序的tmp目錄,而是:

  1. /var/folders/tp/pl9mdxtx199bs8_k29n89ff80000gn/T/ 

貌似也沒有一個像NSLibraryDirectory那樣的參數(shù)可以直接用來獲取這個目錄。

不過,如果我們可以獲得這個程序的根目錄,就可以獲取tmp目錄了:

  1. //獲取程序的根目錄 
  2. NSString *homeDirectory = NSHomeDirectory(); 
  3. //獲取tmp目錄的地址 
  4. NSString *tmpDirectory = [homeDirectory stringByAppendingPathComponent:@"tmp"]; 

tmpDirectory中存儲的就是本程序的tmp目錄。

我使用FileManager向其中創(chuàng)建子目錄和文件時都可以執(zhí)行,不過我有個程序試圖用FTP向其中下載文件,卻出現(xiàn)了文件寫入錯誤。

獲取了上述目錄地址后,想要獲得其中的文件或者子目錄,只要:

  1. NSString *filename = [documentsDirectory stringByAppendingPathComponent:@"filename.txt"]; 

在真機上,NSTemporaryDirectory對應的就是app目錄的tmp目錄。

責任編輯:閆佳明 來源: cocoachina
相關推薦

2015-08-24 13:46:17

2022-02-17 16:32:58

Android隱私沙盒隱私保護標準

2011-06-20 18:31:10

沙盒效應

2023-07-09 00:32:12

2023-04-28 17:53:09

Kubernetes沙盒Signadot

2018-01-02 15:34:47

2011-06-30 15:42:49

卡巴斯基沙盒

2009-07-24 20:08:06

2017-10-23 14:08:37

2015-11-25 16:12:13

2011-06-28 16:10:18

沙盒效應網站排名

2009-12-04 10:20:53

2014-07-15 10:26:55

2013-05-30 09:41:16

2015-03-09 09:57:16

iOS沙盒機制

2011-05-10 14:27:27

2024-01-16 07:46:11

2013-11-14 14:02:57

2009-11-26 10:57:27

2020-09-18 10:46:10

網絡攻擊
點贊
收藏

51CTO技術棧公眾號