沙盒文件目錄
在iOS系統(tǒng)的安全機(jī)制沐悦,每個(gè)APP都有自己的文件目錄侥蒙,且只能訪問自己的文件目錄绳军。該機(jī)制被稱為沙盒機(jī)制印机。
沙盒文件結(jié)構(gòu)如下
3222019-b95d9fe54290b315.png
最上面的bundle container目錄為APP程序的安裝目錄,在安裝后為不可修改狀態(tài)门驾。
中間的data container目錄為APP數(shù)據(jù)存儲(chǔ)目錄耳贬,保存APP運(yùn)行時(shí)需要的數(shù)據(jù)。
最下面的iCloud container目錄為云存儲(chǔ)目錄猎唁,當(dāng)APP需要iCloud云存儲(chǔ)時(shí)可以進(jìn)行訪問。
data container目錄介紹
發(fā)中最常用到的是data container目錄顷蟆,系統(tǒng)在安裝APP時(shí)就為用戶創(chuàng)建了幾個(gè)固定的目錄供編程人員使用诫隅。初始化時(shí)的目錄結(jié)構(gòu)如下
- Documents
保存用戶創(chuàng)建的文檔文件的目錄,用戶可以通過文件分享分享該目錄下的文件帐偎。在iTunes和iCloud備份時(shí)會(huì)備份該目錄逐纬。建議保存你希望用戶看得見的文件。 - Library
蘋果不建議在該目錄下保存任何用戶相關(guān)數(shù)據(jù)削樊,而是保存APP運(yùn)行需要的修改數(shù)據(jù)豁生,當(dāng)然用戶可以根據(jù)自己的實(shí)際需要進(jìn)行保存。
該目錄下默認(rèn)有兩個(gè)子目錄漫贞,為Caches甸箱、Preferences。根據(jù)文檔還有另外兩個(gè)系統(tǒng)預(yù)存放文件的子目錄迅脐,分別是Application Support芍殖、Frameworks。用戶還可以自己根據(jù)需要?jiǎng)?chuàng)建相應(yīng)的目錄谴蔑。該目錄下除Caches目錄外豌骏,在iTunes和iCloud備份時(shí)會(huì)備份除Caches目錄外的其他所有目錄龟梦。四個(gè)目錄的預(yù)定義如下:
Cache:建議保存數(shù)據(jù)緩存使用。在用戶的磁盤空間已經(jīng)使用完畢時(shí)有可能刪除該目錄下的文件窃躲,在APP使用期間不會(huì)刪除计贰,APP沒有運(yùn)行時(shí)系統(tǒng)有可能進(jìn)行刪除。需要持久化的數(shù)據(jù)建議不要保存在該目錄下蒂窒,以免系統(tǒng)強(qiáng)制刪除躁倒。
Preferences:用戶偏好存儲(chǔ)目錄,在使用NSUserDefaults或者CFPreferences接口保存的數(shù)據(jù)保存在該目錄下刘绣,編程人員不需要對(duì)該目錄進(jìn)行管理樱溉。在iTunes和iCloud備份時(shí)會(huì)備份該目錄。
Application Support:建議用來存儲(chǔ)除用戶數(shù)據(jù)相關(guān)以外的所有文件纬凤,如游戲的新關(guān)卡福贞。在iTunes和iCloud備份時(shí)會(huì)備份該目錄。
Frameworks:用來保存動(dòng)態(tài)庫的文件夾停士,在iOS系統(tǒng)中已不能使用挖帘,該目錄可以忽略。 - tmp
蘋果建議該目錄用來保存臨時(shí)使用的數(shù)據(jù)恋技,編程人員應(yīng)該在數(shù)據(jù)長時(shí)間內(nèi)不使用時(shí)主動(dòng)刪除該目錄下的文件拇舀,在APP沒有運(yùn)行期間,系統(tǒng)可能刪除該目錄下的文件蜻底。在iTunes和iCloud備份時(shí)不會(huì)備份該目錄骄崩。
綜上所述,我們保存文件可以保存在Application Support或者Documents目錄之下薄辅,臨時(shí)緩存文件則可根據(jù)需要保存到tmp和Cache目錄下面要拂,由于tmp和Cache目錄有可能被系統(tǒng)刪除,所有不能保存重要的文件數(shù)據(jù)站楚。
除系統(tǒng)推薦的目錄之外脱惰,用戶也可以自己創(chuàng)建目錄,也可以在推薦的目錄下創(chuàng)建子目錄進(jìn)行管
- 目錄路徑獲取
//沙盒根目錄
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();