學習筆記:iOS app 文件系統(tǒng)簡明介紹

簡介

在日常 iOS 開發(fā)中,我們都會接觸到數(shù)據(jù)持久化接口,如用于保存用戶偏好數(shù)據(jù)的 NSUserDefaults,增刪文件的 FileManager,以及操作結(jié)構(gòu)化數(shù)據(jù)的數(shù)據(jù)庫技術(shù) Core Data。這些數(shù)據(jù)在本地的保存都是按照 iOS 的文件系統(tǒng)的規(guī)則存放在對應的目錄中。這篇文章目的是記錄我在閱讀完蘋果文檔后得到的一些要點概要。

沙盒文件系統(tǒng)

每一個 app 都有各自獨立的沙盒(sandbox)容器,容納了 app bundle、數(shù)據(jù)儲存容器以及 icloud 儲存容器。這樣設計的好處是安全:既可以隔絕其他 app 非法讀寫自己的數(shù)據(jù),也防止了自己的文件操作對系統(tǒng)其他地方有干涉。


app 的文件系統(tǒng)結(jié)構(gòu)

既然沙盒里面也做了不同目錄的功能分類,下面來簡明了解下各自的作用:

MyApp.app

就是平時編譯打包出來的 app bundle,包括 app 的可執(zhí)行文件以及運行所需的資源文件。在運行時,我們不能對此目錄進行寫入。蘋果在安裝 app 時會對 bundle 進行簽名,之后每次啟動 app 時會先驗證簽名,如果驗證失敗就無法啟動。因為寫入操作會改變簽名,因此寫入后 app 就無法再啟動。

Documents/

會被 iCloud 同步或 iTunes 備份的目錄。蘋果建議這個目錄用來存放能夠暴露給用戶的文件——用戶在使用 app 過程中可以創(chuàng)建和修改的文件。例如繪圖應用里用戶創(chuàng)建的畫板文件,日志應用里創(chuàng)建的文檔。

另外,系統(tǒng)還可能生成 Documents/Inbox/ 目錄,用于保存來自其他 app 或者 UIDocumentInteractionController 打開的文件。例如郵件附件,如果你的 app 可以處理附件的文件格式,
打開附件時就會被復制到 Documents/Inbox/ 下。要注意的是,用戶可以讀取或者刪除此目錄下的文件,但不可以修改或者創(chuàng)建。因此如果用戶需要修改,需要先行把文件復制到其他可行的目錄下。

Library/

同樣是會被 iCloud 同步或 iTunes 備份的目錄(除了 Caches 子目錄)。區(qū)別在于蘋果建議這個目錄存放那些用于支持應用運行而同時不應該暴露給用戶的文件。根據(jù)用途,蘋果建議放在不同子目錄下:

Library/Application Support/

存放支撐 app 正常功能模塊運作的文件,如運行日志,配置文件,模板,bundle 或 Documents/Inbox/ 修改過的文件等。蘋果建議使用公司或應用的倒寫域名作為子文件夾存放資料。

Library/Application Support 例子

Library/Caches/

存放 app 的暫存文件。這個目錄的文件不會被 iCloud 同步或 iTunes 備份,適合存放可以從服務器上重新下載的數(shù)據(jù),如音樂應用的本地歌曲儲存。要注意的是,在設備還原時,系統(tǒng)會清空此目錄;而在設備儲存容量不足時,系統(tǒng)在少數(shù)情況里,在 app 沒運行的情況下刪除此目錄。

Library/Preferences/

存放 app 的偏好文件,默認情況下是使用 NSUserDefaults 產(chǎn)生的 plist 文件。app 不應該自行在此目錄下創(chuàng)建文件,而應該通過 NSUserDefaults 來讀寫偏好。

tmp/

用來存放生命周期更短的臨時文件。系統(tǒng)在 app 進程被停掉時很有可能會清空目錄,因此只適合用來存放只在 app 當前運行進程下用到的文件。顯然,此目錄不會被 iCloud 同步或 iTunes 備份。

后記

筆記很簡略,但可以用作對文檔所述要點的歸納整理。對系統(tǒng)默認目錄的特性了解,有利于在開發(fā)過程中需要進行數(shù)據(jù)持久化時心中有數(shù),做出合理的決定。

參考

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

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