iOS文件目錄介紹

沙盒文件目錄

在iOS系統(tǒng)的安全機制,每個APP都有自己的文件目錄,且只能訪問自己的文件目錄。該機制被稱為沙盒機制。
沙盒文件結(jié)構(gòu)如下


3222019-b95d9fe54290b315.png

最上面的bundle container目錄為APP程序的安裝目錄,在安裝后為不可修改狀態(tài)。
中間的data container目錄為APP數(shù)據(jù)存儲目錄,保存APP運行時需要的數(shù)據(jù)。
最下面的iCloud container目錄為云存儲目錄,當APP需要iCloud云存儲時可以進行訪問。

data container目錄介紹

發(fā)中最常用到的是data container目錄,系統(tǒng)在安裝APP時就為用戶創(chuàng)建了幾個固定的目錄供編程人員使用。初始化時的目錄結(jié)構(gòu)如下

  • Documents
    保存用戶創(chuàng)建的文檔文件的目錄,用戶可以通過文件分享分享該目錄下的文件。在iTunes和iCloud備份時會備份該目錄。建議保存你希望用戶看得見的文件。
  • Library
    蘋果不建議在該目錄下保存任何用戶相關(guān)數(shù)據(jù),而是保存APP運行需要的修改數(shù)據(jù),當然用戶可以根據(jù)自己的實際需要進行保存。
    該目錄下默認有兩個子目錄,為Caches、Preferences。根據(jù)文檔還有另外兩個系統(tǒng)預(yù)存放文件的子目錄,分別是Application Support、Frameworks。用戶還可以自己根據(jù)需要創(chuàng)建相應(yīng)的目錄。該目錄下除Caches目錄外,在iTunes和iCloud備份時會備份除Caches目錄外的其他所有目錄。四個目錄的預(yù)定義如下:
    Cache:建議保存數(shù)據(jù)緩存使用。在用戶的磁盤空間已經(jīng)使用完畢時有可能刪除該目錄下的文件,在APP使用期間不會刪除,APP沒有運行時系統(tǒng)有可能進行刪除。需要持久化的數(shù)據(jù)建議不要保存在該目錄下,以免系統(tǒng)強制刪除。
    Preferences:用戶偏好存儲目錄,在使用NSUserDefaults或者CFPreferences接口保存的數(shù)據(jù)保存在該目錄下,編程人員不需要對該目錄進行管理。在iTunes和iCloud備份時會備份該目錄。
    Application Support:建議用來存儲除用戶數(shù)據(jù)相關(guān)以外的所有文件,如游戲的新關(guān)卡。在iTunes和iCloud備份時會備份該目錄。
    Frameworks:用來保存動態(tài)庫的文件夾,在iOS系統(tǒng)中已不能使用,該目錄可以忽略。
  • tmp
    蘋果建議該目錄用來保存臨時使用的數(shù)據(jù),編程人員應(yīng)該在數(shù)據(jù)長時間內(nèi)不使用時主動刪除該目錄下的文件,在APP沒有運行期間,系統(tǒng)可能刪除該目錄下的文件。在iTunes和iCloud備份時不會備份該目錄。

綜上所述,我們保存文件可以保存在Application Support或者Documents目錄之下,臨時緩存文件則可根據(jù)需要保存到tmp和Cache目錄下面,由于tmp和Cache目錄有可能被系統(tǒng)刪除,所有不能保存重要的文件數(shù)據(jù)。
除系統(tǒng)推薦的目錄之外,用戶也可以自己創(chuàng)建目錄,也可以在推薦的目錄下創(chuàng)建子目錄進行管

  • 目錄路徑獲取
        //沙盒根目錄
        NSString *homePath = NSHomeDirectory();
        //document目錄
        NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
        //library目錄
        NSString *libraryPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject;
        //caches目錄
        NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
        //application support目錄
        NSString *applicationSupportPath = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES).firstObject;
        //preference目錄
        NSString *preferencePath = NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES).firstObject;
        //tem目錄
        NSString *temPath = NSTemporaryDirectory();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容