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 ;
}
相關文章
- SDWebImage清除快取Web快取
- jQuery ajax清除快取jQuery快取
- flutter 獲取應用快取以及清除快取Flutter快取
- macOS 中清除 DNS 快取MacDNS快取
- 清除xhmlhttp快取的方法HTTP快取
- 清除DNS快取資訊方法DNS快取
- SDWebImage實現圖片展示、快取、清除快取Web快取
- 重新整理dns快取命令 dns快取清除命令DNS快取
- 微信清除快取資料方法快取
- Mac OS X 清除DNS快取MacDNS快取
- Dynamics 365 Portal如何清除快取快取
- 如何清除瀏覽器快取瀏覽器快取
- C#清除頁面快取C#快取
- 清除 Nuxt 資料快取:clearNuxtDataUX快取
- 清除 Nuxt 狀態快取:clearNuxtStateUX快取
- 用whistle清除js和css快取JSCSS快取
- jQuery清除快取例項程式碼jQuery快取
- 高效清除系統快取有妙招快取
- 清除瀏覽器快取的方法瀏覽器快取
- Android 清除快取功能實現Android快取
- ASP.NET清除頁面快取ASP.NET快取
- 清除 Electron 中的快取資料快取
- 如何快速清除 Ubuntu 的系統快取Ubuntu快取
- 清除快取資料--工具類封裝快取封裝
- IE瀏覽器清除Ajax快取方法瀏覽器快取
- 如何在SpringBoot中清除所有快取 ?Spring Boot快取
- 微信開發:清除微信瀏覽器快取瀏覽器快取
- 如何在蘋果 Mac上清除快取檔案?蘋果Mac快取
- Android清除本地資料快取程式碼Android快取
- 注意 Laravel 清除快取 PHP artisan cache:clear 的使用Laravel快取PHP
- 修改完後,不會清除快取的問題?快取
- 谷歌瀏覽器怎麼清除快取 chrome瀏覽器清理快取方法介紹谷歌瀏覽器快取Chrome
- win10如何清除快取和垃圾,清理win10快取和垃圾的方法Win10快取
- 清空微信瀏覽器清除快取debug頁面瀏覽器快取
- 在 Linux/Unix/Mac 下清除 DNS 查詢快取LinuxMacDNS快取
- linux下清除Squid快取的方法記錄LinuxUI快取
- myeclipse svn 清除快取使用者和密碼Eclipse快取密碼
- 怎麼清除瀏覽器快取?瀏覽器快取清理的方法步驟是什麼?瀏覽器快取