/Documents:主要用於儲存用戶生成的數據或者不能重新創建的數據。這些可能包括由你的應用程式創建的文件、從服務器下載的文件、用戶在應用程式中創建或修改的數據等。
這些數據在應用程式的生命週期中是持久保存的,即使應用程式被終止或者系統重啟,這些數據也會保留。此外,如果你的應用程式啟用了 iCloud,那麼存儲在 Documents 目錄中的數據可以被自動備份到 iCloud,這樣用戶就可以在多個設備上訪問這些數據。
/Caches:此目錄用於存儲可以重新生成或下載的數據,如圖片快取、數據快取等。當設備的儲存空間不足時,系統可能會清除此目錄中的數據。然而,這種清理不是即時的,所以如果你的應用程式在後台運行,或者在一段時間內沒有被使用,這些快取數據可能仍然存在。
/tmp:此目錄用於存儲需要立即使用,但不需要長期保存的數據。當你的應用程式結束運行後,系統可能會清除此目錄中的數據。因此,你不應該在此目錄中存儲任何需要長期保存的數據。
一般來說,圖片、檔案快取應該放在/Caches裡。
我用的SDImage,本身就有內建快取機制。
存放的地點也在/Caches資料夾裡面
~/Library/Caches/com.hackemist.SDImageCache
他允許客製化設置最大快取大小和最長快取時間。當快取大小超過這個限制,或者某個圖像的快取時間超過時間,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的週期,去檢查有沒有過期。
shouldRemoveExpiredDataWhenEnterBackground
shouldRemoveExpiredDataWhenTerminate
預設都是true
由於有一些圖片、檔案是用Alamofire下載,沒辦法用SDWebImage管理。
目前我採用的方案會把圖片檔案下載後集中存在/Caches裡,做一些時間點判斷清除。因為如同上面講的/Caches雖然有可能被系統清除,但也有可能都沒清,造成App越來越大。
1. 全清空:版本更新後,使用者登出