日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS沙盒目录结构解析

發(fā)布時間:2024/4/17 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS沙盒目录结构解析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

iOS沙盒目錄結(jié)構(gòu)解析

原文地址:http://blog.csdn.net/wzzvictory/article/details/18269713 出于安全考慮,iOS系統(tǒng)的沙盒機制規(guī)定每個應(yīng)用都只能訪問當(dāng)前沙盒目錄下面的文件(也有例外,比如系統(tǒng)通訊錄能在用戶授權(quán)的情況下被第三方應(yīng)用訪問),這個規(guī)則把iOS系統(tǒng)的封閉性展現(xiàn)的淋漓盡致。

一、沙盒中幾個主要的目錄

每個沙盒下面都有相似的目錄結(jié)構(gòu),如下圖所示(出自蘋果官方文檔): 每個應(yīng)用的沙盒目錄都是相似的,主要包含圖中所示的4個目錄:

1、MyApp.app

①存放內(nèi)容 該目錄包含了應(yīng)用程序本身的數(shù)據(jù),包括資源文件和可執(zhí)行文件等。程序啟動以后,會根據(jù)需要從該目錄中動態(tài)加載代碼或資源到內(nèi)存,這里用到了lazy loading的思想。 ②整個目錄是只讀的 為了防止被篡改,應(yīng)用在安裝的時候會將該目錄簽名。非越獄情況下,該目錄中內(nèi)容是無法更改的;在越獄設(shè)備上如果更改了目錄內(nèi)容,對應(yīng)的簽名就會被改變,這種情況下蘋果官網(wǎng)描述的后果是應(yīng)用程序?qū)o法啟動,我沒實踐過。 ③是否會被iTunes同步 否

2、Documents

①存放內(nèi)容 我們可以將應(yīng)用程序的數(shù)據(jù)文件保存在該目錄下。不過這些數(shù)據(jù)類型僅限于不可再生的數(shù)據(jù),可再生的數(shù)據(jù)文件應(yīng)該存放在Library/Cache目錄下。 ②是否會被iTunes同步 是

3、Documents/Inbox

①存放內(nèi)容 該目錄用來保存由外部應(yīng)用請求當(dāng)前應(yīng)用程序打開的文件。 比如我們的應(yīng)用叫A,向系統(tǒng)注冊了幾種可打開的文件格式,B應(yīng)用有一個A支持的格式的文件F,并且申請調(diào)用A打開F。由于F當(dāng)前是在B應(yīng)用的沙盒中,我們知道,沙盒機制是不允許A訪問B沙盒中的文件,因此蘋果的解決方案是講F拷貝一份到A應(yīng)用的Documents/Inbox目錄下,再讓A打開F。 ②是否會被iTunes同步 是

4、Library

①存放內(nèi)容 蘋果建議用來存放默認設(shè)置或其它狀態(tài)信息。 ②是否會被iTunes同步 是,但是要除了Caches子目錄外

5、Library/Caches

①存放內(nèi)容 主要是緩存文件,用戶使用過程中緩存都可以保存在這個目錄中。前面說過,Documents目錄用于保存不可再生的文件,那么這個目錄就用于保存那些可再生的文件,比如網(wǎng)絡(luò)請求的數(shù)據(jù)。鑒于此,應(yīng)用程序通常還需要負責(zé)刪除這些文件。 ②是否會被iTunes同步 否。

6、Library/Preferences

①存放內(nèi)容 應(yīng)用程序的偏好設(shè)置文件。我們使用NSUserDefaults寫的設(shè)置數(shù)據(jù)都會保存到該目錄下的一個plist文件中,這就是所謂的寫道plist中! ②是否會被iTunes同步 是

7、tmp

①存放內(nèi)容 各種臨時文件,保存應(yīng)用再次啟動時不需要的文件。而且,當(dāng)應(yīng)用不再需要這些文件時應(yīng)該主動將其刪除,因為該目錄下的東西隨時有可能被系統(tǒng)清理掉,目前已知的一種可能清理的原因是系統(tǒng)磁盤存儲空間不足的時候。 ②是否會被iTunes同步 否

二、獲取主要目錄路徑的方式

1、沙盒目錄

  • NSLog(@"%@",NSHomeDirectory());??
  • 輸出結(jié)果:
  • /var/mobile/Applications/326640A7-6E27-4C63-BA5E-7391F203659A??
  • 2、tmp

  • NSLog(@"%@",NSTemporaryDirectory());??
  • 輸出結(jié)果:
  • /private/var/mobile/Applications/326640A7-6E27-4C63-BA5E-7391F203659A/tmp/??
  • 3、Myapp.app

  • NSLog(@"%@",[[NSBundle?mainBundle]?bundlePath]);??
  • 輸出結(jié)果:
  • /var/mobile/Applications/326640A7-6E27-4C63-BA5E-7391F203659A/PhoneCall.app??
  • 4、Documents

  • NSArray?*paths?=?NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,?NSUserDomainMask,?YES);??
  • NSString?*path?=?[paths?objectAtIndex:0];??
  • NSLog(@"%@",path);??
  • 輸出結(jié)果:
  • /var/mobile/Applications/326640A7-6E27-4C63-BA5E-7391F203659A/Documents??
  • 這里用到的NSSearchPathForDirectoriesInDomains方法需要解釋下,其聲明如下:
  • FOUNDATION_EXPORT?NSArray?*NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory?directory,?NSSearchPathDomainMask?domainMask,?BOOL?expandTilde);??
  • 該方法用于返回指定范圍內(nèi)的指定名稱的目錄的路徑集合。有三個參數(shù):
    • directory
    NSSearchPathDirectory類型的enum值,表明我們要搜索的目錄名稱,比如這里用NSDocumentDirectory表明我們要搜索的是Documents目錄。如果我們將其換成NSCachesDirectory就表示我們搜索的是Library/Caches目錄。
    • domainMask
    NSSearchPathDomainMask類型的enum值,指定搜索范圍,這里的NSUserDomainMask表示搜索的范圍限制于當(dāng)前應(yīng)用的沙盒目錄。還可以寫成NSLocalDomainMask(表示/Library)、NSNetworkDomainMask(表示/Network)等。
    • expandTilde
    BOOL值,表示是否展開波浪線~。我們知道在iOS中~的全寫形式是/User/userName,該值為YES即表示寫成全寫形式,為NO就表示直接寫成“~”。

    三、參考文檔

    1、蘋果官方文檔

    https://developer.apple.com/library/mac/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40010672-CH1-SW1

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/qianLL/p/5354176.html

    總結(jié)

    以上是生活随笔為你收集整理的iOS沙盒目录结构解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。