iOS App 圖片檔案快取機制

更新於 發佈於 閱讀時間約 3 分鐘

Sandbox 架構

app sandbox

app sandbox

/Documents:主要用於儲存用戶生成的數據或者不能重新創建的數據。這些可能包括由你的應用程式創建的文件、從服務器下載的文件、用戶在應用程式中創建或修改的數據等。

這些數據在應用程式的生命週期中是持久保存的,即使應用程式被終止或者系統重啟,這些數據也會保留。此外,如果你的應用程式啟用了 iCloud,那麼存儲在 Documents 目錄中的數據可以被自動備份到 iCloud,這樣用戶就可以在多個設備上訪問這些數據。

/Caches:此目錄用於存儲可以重新生成或下載的數據,如圖片快取、數據快取等。當設備的儲存空間不足時,系統可能會清除此目錄中的數據。然而,這種清理不是即時的,所以如果你的應用程式在後台運行,或者在一段時間內沒有被使用,這些快取數據可能仍然存在。

/tmp:此目錄用於存儲需要立即使用,但不需要長期保存的數據。當你的應用程式結束運行後,系統可能會清除此目錄中的數據。因此,你不應該在此目錄中存儲任何需要長期保存的數據。

一般來說,圖片、檔案快取應該放在/Caches裡。

SDWebImage套件快取機制

我用的SDImage,本身就有內建快取機制。

存放的地點也在/Caches資料夾裡面

~/Library/Caches/com.hackemist.SDImageCache

raw-image

他允許客製化設置最大快取大小和最長快取時間。當快取大小超過這個限制,或者某個圖像的快取時間超過時間,SDWebImage 會自動清理這些圖像。

可以使用 SDImageCache 類的 config 屬性來設置這些值,例如:

SDImageCache.shared.config.maxDiskSize = 250 * 1024 * 1024 // 250 MB
SDImageCache.shared.config.maxDiskAge = 60 * 60 * 24 * 7 // 一周

預設值是一週,跟0MB。

也可以手動清理快取,使用 SDImageCache 類的 clearMemory() ,clearDisk(onCompletion:) 和 deleteOldFiles(completionBlock:) 方法。

另外SDImageCache清理的時間也是跟著UIApplication的週期,去檢查有沒有過期。

didEnterBackground

didEnterBackground

willTerminate

willTerminate

shouldRemoveExpiredDataWhenEnterBackground

shouldRemoveExpiredDataWhenTerminate

預設都是true

自行管理快取

由於有一些圖片、檔案是用Alamofire下載,沒辦法用SDWebImage管理。

目前我採用的方案會把圖片檔案下載後集中存在/Caches裡,做一些時間點判斷清除。因為如同上面講的/Caches雖然有可能被系統清除,但也有可能都沒清,造成App越來越大。

1. 全清空:版本更新後,使用者登出

  1. 超過一個容量大小(ex. 2GB):每次啟動時判斷,超過全清空
avatar-img
7會員
35內容數
紀錄iOS開發上遇到的問題或是一些流程筆記。主要都是Swift。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Michelle Chen的沙龍 的其他內容
SwiftUI的TabView實在太好用啦!我要大大的推廣他ლ(╹◡╹ლ) 換頁+小圓點滑動 無限自動輪播 底部Tabbar
這個浮誇標題是ChatGPT幫我想的😊 圖也是DALL幫我產的, AI萬歲! GCD也是面試必問題啊!我答超爛的,只會用背景呼叫API+切Main Thread更新畫面,今天就來認真了解。 GCD是什麼? 先來問ChatGPT什麼是GCD? GCD,全名 Grand Central Dis
字數算法 = string.count? 在swift算一個string的字數時候,很直覺的會想到用.count來算 let s = "這是幾個字呢".count print(s.count) // 6 毫無疑問的安心信賴6個字 表情符號的場合 let emoji = "😂" print
Xcode15的 @escaping closure裡解包後的[weak self]不必再寫 self了!! 用一個範例class Test來實驗,裡面只有一個變數a跟一個testClosure回"test",再用callTestClosure把變數a改成"test" 編譯正常!變數a成功被改成
一樣先來看官方文件 A view controller that provides access to documents or destinations outside your app’s sandbox. 其實就是讓你去讀取檔案App的東西 有兩種模式,Don’t copy the do
iCloud+的服務 只有付錢的人才能用,免費仔如我從來沒聽過😗 簡介 通常你在瀏覽網頁時,網路供應商和你所造訪的網站可以看到網頁流量所包含的資訊(例如 DNS 記錄和 IP 位址)。此資訊可用來判斷你的身分,並建立描述檔來記錄你的位置以及往後的瀏覽記錄。 「iCloud 私密轉送」的設計旨
SwiftUI的TabView實在太好用啦!我要大大的推廣他ლ(╹◡╹ლ) 換頁+小圓點滑動 無限自動輪播 底部Tabbar
這個浮誇標題是ChatGPT幫我想的😊 圖也是DALL幫我產的, AI萬歲! GCD也是面試必問題啊!我答超爛的,只會用背景呼叫API+切Main Thread更新畫面,今天就來認真了解。 GCD是什麼? 先來問ChatGPT什麼是GCD? GCD,全名 Grand Central Dis
字數算法 = string.count? 在swift算一個string的字數時候,很直覺的會想到用.count來算 let s = "這是幾個字呢".count print(s.count) // 6 毫無疑問的安心信賴6個字 表情符號的場合 let emoji = "😂" print
Xcode15的 @escaping closure裡解包後的[weak self]不必再寫 self了!! 用一個範例class Test來實驗,裡面只有一個變數a跟一個testClosure回"test",再用callTestClosure把變數a改成"test" 編譯正常!變數a成功被改成
一樣先來看官方文件 A view controller that provides access to documents or destinations outside your app’s sandbox. 其實就是讓你去讀取檔案App的東西 有兩種模式,Don’t copy the do
iCloud+的服務 只有付錢的人才能用,免費仔如我從來沒聽過😗 簡介 通常你在瀏覽網頁時,網路供應商和你所造訪的網站可以看到網頁流量所包含的資訊(例如 DNS 記錄和 IP 位址)。此資訊可用來判斷你的身分,並建立描述檔來記錄你的位置以及往後的瀏覽記錄。 「iCloud 私密轉送」的設計旨
你可能也想看
Google News 追蹤
Thumbnail
iCloud 照片是一種雲端照片儲存服務,可以將您的照片和影片備份到雲端, 並在您的所有裝置上保持最新。但是,如果您從 iCloud.com 刪除照片或影片, 它們也會從所有開啟 iCloud 照片的裝置中刪除。 因此,在刪除照片或影片之前, 請務必確認您已經將它們備份到本地裝置或其他雲端儲
Thumbnail
iCloud 照片是一種雲端照片儲存服務,可以將您的照片和影片備份到雲端, 並在您的所有裝置上保持最新。但是,如果您從 iCloud.com 刪除照片或影片, 它們也會從所有開啟 iCloud 照片的裝置中刪除。 因此,在刪除照片或影片之前, 請務必確認您已經將它們備份到本地裝置或其他雲端儲
Thumbnail
需求情境: 在設計畫面時,資料來源是後台的 api,每一次畫面細節的修修改改,都會觸發 Xcode Preview 程序,導致不斷呼叫後台。此時若資料結構和大小都具有一定規模,就會導致效率低落,不斷等待,且消耗伺服器資源甚鉅。 解決方案: 將後台傳回的資料以檔案形式暫存在本地端,每次 pr
Thumbnail
如果所有裝置都可以透過單一檔案管理器統一管理這會有多方便? 紅茶最近在Github上找到專案,名叫Spacedrive。這個專案的宗旨,開發團隊希望未來只需要一個App就可以連接所有裝置和雲端空間,來更方便的管理自己手上的檔案。
Thumbnail
本教學適用於小米系(Xiaomi、Redmi與 Poco)的手機,其他手機不會內建小米相簿。 緣由: 小米相簿基本上會快取手機裡所有圖片的縮圖,因此當手機裡照片與下載的圖片越多,快取起來佔用的空間就會相當可觀,圖片若有上萬張,快取檔也會變成數GB級的成長,好玩的是當你想要清除這些快取時,小米說這
※ 什麼是快取 (Cache)[kash]?快取 (Cache) 的機制為何? 什麼是快取 (Cache)? 快取(Cache)是一種將資料存儲在特定位置以便快速檢索的技術。目的是為了彌補 Database 在業務邏輯複雜且數據量龐大時的不足,基本原理是將可重複使用的資料,也就是最常或最近使用的
Thumbnail
我最近在思考關於記憶體的最佳存放,在哪裡會最好 得出來的答案 就是...必須用笨方法 但笨方法最為安全 1.定期刪除信箱和手機裡無用影片和截圖或垃圾訊息 2.定期分類自己的文件和圖檔 3.定期備份資料-放在自己常用的電腦裡或另外買隨身碟和硬碟 4.可以暫時存在雲端或GOOGLE文件
Thumbnail
抓取對象檔案,自動進行壓縮處理,壓縮後產出一個壓縮檔案,如此便可節省硬碟使用空間
Thumbnail
引言 在現今迅速發展的科技環境下,資料克隆技術已成為數據管理中不可或缺的一環。在日常生活和商業運營中,我們經常需要處理大量數據的複製、備份和遷移,而SSD克隆技術應運而生,提供了高效、快速和方便的解決方案。 目錄 SSD克隆的原理 SSD克隆的方法 SSD克隆機器的運作 軟體 vs. 專
Thumbnail
iCloud 照片是一種雲端照片儲存服務,可以將您的照片和影片備份到雲端, 並在您的所有裝置上保持最新。但是,如果您從 iCloud.com 刪除照片或影片, 它們也會從所有開啟 iCloud 照片的裝置中刪除。 因此,在刪除照片或影片之前, 請務必確認您已經將它們備份到本地裝置或其他雲端儲
Thumbnail
iCloud 照片是一種雲端照片儲存服務,可以將您的照片和影片備份到雲端, 並在您的所有裝置上保持最新。但是,如果您從 iCloud.com 刪除照片或影片, 它們也會從所有開啟 iCloud 照片的裝置中刪除。 因此,在刪除照片或影片之前, 請務必確認您已經將它們備份到本地裝置或其他雲端儲
Thumbnail
需求情境: 在設計畫面時,資料來源是後台的 api,每一次畫面細節的修修改改,都會觸發 Xcode Preview 程序,導致不斷呼叫後台。此時若資料結構和大小都具有一定規模,就會導致效率低落,不斷等待,且消耗伺服器資源甚鉅。 解決方案: 將後台傳回的資料以檔案形式暫存在本地端,每次 pr
Thumbnail
如果所有裝置都可以透過單一檔案管理器統一管理這會有多方便? 紅茶最近在Github上找到專案,名叫Spacedrive。這個專案的宗旨,開發團隊希望未來只需要一個App就可以連接所有裝置和雲端空間,來更方便的管理自己手上的檔案。
Thumbnail
本教學適用於小米系(Xiaomi、Redmi與 Poco)的手機,其他手機不會內建小米相簿。 緣由: 小米相簿基本上會快取手機裡所有圖片的縮圖,因此當手機裡照片與下載的圖片越多,快取起來佔用的空間就會相當可觀,圖片若有上萬張,快取檔也會變成數GB級的成長,好玩的是當你想要清除這些快取時,小米說這
※ 什麼是快取 (Cache)[kash]?快取 (Cache) 的機制為何? 什麼是快取 (Cache)? 快取(Cache)是一種將資料存儲在特定位置以便快速檢索的技術。目的是為了彌補 Database 在業務邏輯複雜且數據量龐大時的不足,基本原理是將可重複使用的資料,也就是最常或最近使用的
Thumbnail
我最近在思考關於記憶體的最佳存放,在哪裡會最好 得出來的答案 就是...必須用笨方法 但笨方法最為安全 1.定期刪除信箱和手機裡無用影片和截圖或垃圾訊息 2.定期分類自己的文件和圖檔 3.定期備份資料-放在自己常用的電腦裡或另外買隨身碟和硬碟 4.可以暫時存在雲端或GOOGLE文件
Thumbnail
抓取對象檔案,自動進行壓縮處理,壓縮後產出一個壓縮檔案,如此便可節省硬碟使用空間
Thumbnail
引言 在現今迅速發展的科技環境下,資料克隆技術已成為數據管理中不可或缺的一環。在日常生活和商業運營中,我們經常需要處理大量數據的複製、備份和遷移,而SSD克隆技術應運而生,提供了高效、快速和方便的解決方案。 目錄 SSD克隆的原理 SSD克隆的方法 SSD克隆機器的運作 軟體 vs. 專