iOS-清除快取(有用)
封裝成一個工具類,實現2個類方法。
一言不合···上程式碼····
#define cachePath [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]
// 快取大小
+(NSString *)getCachesSize{
// 除錯
#ifdef DEBUG
// 如果資料夾不存在 or 不是一個資料夾, 那麼就丟擲一個異常
// 丟擲異常會導致程式閃退, 所以只在除錯階段丟擲。釋出階段不要再拋了,--->影響使用者體驗
BOOL isDirectory = NO;
BOOL isExist = [[NSFileManager defaultManager] fileExistsAtPath:cachePath isDirectory:&isDirectory];
if (!isExist || !isDirectory) {
NSException *exception = [NSException exceptionWithName:@"檔案錯誤" reason:@"請檢查你的檔案路徑!" userInfo:nil];
[exception raise];
}
//釋出
#else
#endif
//1.獲取“cachePath”資料夾下面的所有檔案
NSArray *subpathArray= [[NSFileManager defaultManager] subpathsAtPath:cachePath];
NSString *filePath = nil;
long long totalSize = 0;
for (NSString *subpath in subpathArray) {
// 拼接每一個檔案的全路徑
filePath =[cachePath stringByAppendingPathComponent:subpath];
BOOL isDirectory = NO; //是否資料夾,預設不是
BOOL isExist = [[NSFileManager defaultManager] fileExistsAtPath:filePath isDirectory:&isDirectory]; // 判斷檔案是否存在
// 檔案不存在,是資料夾,是隱藏檔案都過濾
if (!isExist || isDirectory || [filePath containsString:@".DS"]) continue;
// attributesOfItemAtPath 只可以獲得檔案屬性,不可以獲得資料夾屬性,
//這個也就是需要遍歷資料夾裡面每一個檔案的原因
long long fileSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil] fileSize];
totalSize += fileSize;
}
// 2.將資料夾大小轉換為 M/KB/B
NSString *totalSizeString = nil;
if (totalSize > 1000 * 1000) {
totalSizeString = [NSString stringWithFormat:@"%.1fM",totalSize / 1000.0f /1000.0f];
} else if (totalSize > 1000) {
totalSizeString = [NSString stringWithFormat:@"%.1fKB",totalSize / 1000.0f ];
} else {
totalSizeString = [NSString stringWithFormat:@"%.1fB",totalSize / 1.0f];
}
return totalSizeString;
}
// 清除快取
+ (void)removeCache{
// 1.拿到cachePath路徑的下一級目錄的子資料夾
// contentsOfDirectoryAtPath:error:遞迴
// subpathsAtPath:不遞迴
NSArray *subpathArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:cachePath error:nil];
// 2.如果陣列為空,說明沒有快取或者使用者已經清理過,此時直接return
if (subpathArray.count == 0) {
[SVProgressHUD showNOmessage:@"快取已清理"];
return ;
}
NSError *error = nil;
NSString *filePath = nil;
BOOL flag = NO;
NSString *size = [self getCachesSize];
for (NSString *subpath in subpathArray) {
filePath = [cachePath stringByAppendingPathComponent:subpath];
if ([[NSFileManager defaultManager] fileExistsAtPath:cachePath]) {
// 刪除子資料夾
BOOL isRemoveSuccessed = [[NSFileManager defaultManager] removeItemAtPath:filePath error:&error];
if (isRemoveSuccessed) { // 刪除成功
flag = YES;
}
}
}
if (NO == flag)
[SVProgressHUD showNOmessage:@"快取已清理"];
else
[SVProgressHUD showYESmessage:[NSString stringWithFormat:@"為您騰出%@空間",size]];
return ;
}
相關文章
- flutter 獲取應用快取以及清除快取Flutter快取
- macOS 中清除 DNS 快取MacDNS快取
- 重新整理dns快取命令 dns快取清除命令DNS快取
- Mac OS X 清除DNS快取MacDNS快取
- 清除 Nuxt 資料快取:clearNuxtDataUX快取
- 清除 Nuxt 狀態快取:clearNuxtStateUX快取
- 用whistle清除js和css快取JSCSS快取
- 清除 Electron 中的快取資料快取
- 如何在SpringBoot中清除所有快取 ?Spring Boot快取
- 微信清除快取資料方法快取
- 如何快速清除 Ubuntu 的系統快取Ubuntu快取
- 在 Linux/Unix/Mac 下清除 DNS 查詢快取LinuxMacDNS快取
- 如何在蘋果 Mac上清除快取檔案?蘋果Mac快取
- win10如何清除快取和垃圾,清理win10快取和垃圾的方法Win10快取
- 谷歌瀏覽器怎麼清除快取 chrome瀏覽器清理快取方法介紹谷歌瀏覽器快取Chrome
- 微信開發:清除微信瀏覽器快取瀏覽器快取
- 清空微信瀏覽器清除快取debug頁面瀏覽器快取
- 怎麼清除瀏覽器快取?瀏覽器快取清理的方法步驟是什麼?瀏覽器快取
- 正確清除 DNS 快取( 附全平臺詳細教程 )DNS快取
- 新手進階教程:如何清除Mac上快速預覽的快取Mac快取
- win10系統下清除不了dns快取如何解決Win10DNS快取
- 教你如何在dos下清除列印快取及重啟列印服務快取
- win10正式版系統螢幕快取怎麼清除Win10快取
- win10 edge瀏覽器快取怎麼刪除_清除win10 edge瀏覽器快取的方法Win10瀏覽器快取
- 怎樣實現每次頁面開啟時都清除本頁快取?快取
- 如何清除Safari,Chrome和Firefox中的快取,歷史記錄和CookieChromeFirefox快取Cookie
- 快取穿透、快取擊穿、快取雪崩、快取預熱快取穿透
- 快取穿透、快取擊穿、快取雪崩快取穿透
- 快取穿透、快取雪崩、快取擊穿快取穿透
- Redis快取擊穿、快取穿透、快取雪崩Redis快取穿透
- [Redis]快取穿透/快取擊穿/快取雪崩Redis快取穿透
- HTTP快取——協商快取(快取驗證)HTTP快取
- 快取穿透 快取雪崩快取穿透
- 快取問題(一) 快取穿透、快取雪崩、快取併發 核心概念快取穿透
- 快取穿透、快取擊穿、快取雪崩區別快取穿透
- 清除 Windows 上的 SSL 快取通常是為了解決與 SSL 證書或加密連線相關的問題。你可以按照以下步驟來清除 Windows 上的 SSL 快取:Windows快取加密
- 快取問題(四) 快取穿透、快取雪崩、快取併發 解決案例快取穿透
- 【VUE】重新安裝依賴install無反應解決方案——利用npm清除快取VueNPM快取