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
6會員
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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
豐華挺進國際益生菌品牌市場,Totipro益萃質銷售成績斐然。 參與ISAPP國際益生菌年度研討會,與創辦人和主持人交流研究成果。
Thumbnail
【华纳全真人实景娱乐】 诚信第一、公平、公正、公开 。诚招代理加盟! 实体赌厅现场直播,还原现场1:1。 主营:百家乐—龙虎—牛牛。 现场投注、线上投注、电话投注。三合一平台。 充值渠道便捷:支付宝 微信 银行卡 USDT 缅币 泰铢。 游戏开户联系客服 官方网址:www.363653.tv 官方网
Thumbnail
解放眼睛用耳朵聽電子書的好工具分享,安卓最推薦的【靜讀天下APP】,以及安卓IOS通用的【微信讀書】都支持長時間真人語音朗讀喔!
Thumbnail
前人種樹後人乘涼,好心人提供的軌跡我們就笑納了吧~ ^O^
Thumbnail
一張圖讓你搞懂IOS 14.7更新的內容 IOS 14.7於今日開放更新,這次更新又多了那些內容呢? 就讓皓哥3C為大家簡單整理介紹一下囉~
Thumbnail
有一天朋友傳了條訊息給我,說:身份證上浮水印好麻煩喔,要用線上網頁做,搞好久。 我回:你怎麽不問我啦,我教你阿,超簡單耶! 原來友人為了上傳保險資料(話說最近防疫保險有夠夯),又有個資上的顧慮,才有了以上的對話。接下來想教大家蘋果手機內建的「照片」功能,就能簡簡單單做出浮水印的效果嘍。
Thumbnail
這是 KeePass 網站上所列出的 app。 我本身的需求大概是: 標籤功能(tag) 能夠存取檔案以外的 app 以進行同步 我知道許多雲端硬碟都有支援在檔案這個 app 裡面存取的功能,但我有很多 Google 帳號,而且常常切換,若是是從這邊直接抓資料庫去用的話(如 KeePas
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
豐華挺進國際益生菌品牌市場,Totipro益萃質銷售成績斐然。 參與ISAPP國際益生菌年度研討會,與創辦人和主持人交流研究成果。
Thumbnail
【华纳全真人实景娱乐】 诚信第一、公平、公正、公开 。诚招代理加盟! 实体赌厅现场直播,还原现场1:1。 主营:百家乐—龙虎—牛牛。 现场投注、线上投注、电话投注。三合一平台。 充值渠道便捷:支付宝 微信 银行卡 USDT 缅币 泰铢。 游戏开户联系客服 官方网址:www.363653.tv 官方网
Thumbnail
解放眼睛用耳朵聽電子書的好工具分享,安卓最推薦的【靜讀天下APP】,以及安卓IOS通用的【微信讀書】都支持長時間真人語音朗讀喔!
Thumbnail
前人種樹後人乘涼,好心人提供的軌跡我們就笑納了吧~ ^O^
Thumbnail
一張圖讓你搞懂IOS 14.7更新的內容 IOS 14.7於今日開放更新,這次更新又多了那些內容呢? 就讓皓哥3C為大家簡單整理介紹一下囉~
Thumbnail
有一天朋友傳了條訊息給我,說:身份證上浮水印好麻煩喔,要用線上網頁做,搞好久。 我回:你怎麽不問我啦,我教你阿,超簡單耶! 原來友人為了上傳保險資料(話說最近防疫保險有夠夯),又有個資上的顧慮,才有了以上的對話。接下來想教大家蘋果手機內建的「照片」功能,就能簡簡單單做出浮水印的效果嘍。
Thumbnail
這是 KeePass 網站上所列出的 app。 我本身的需求大概是: 標籤功能(tag) 能夠存取檔案以外的 app 以進行同步 我知道許多雲端硬碟都有支援在檔案這個 app 裡面存取的功能,但我有很多 Google 帳號,而且常常切換,若是是從這邊直接抓資料庫去用的話(如 KeePas