概述
可以僅僅清理圖片緩存, 也可以清理所有的緩存文件(包括圖片、視頻、音頻等).
詳細
一般我們項目中的緩存一般分為2大塊:一個是自己緩存的一些數據;還有一個就是我們使用的SDWebImage這個第三方庫給我們自動緩存的圖片文件緩存了.
實際項目中會配合設置里去清理緩存, 效果截圖如下:
一、實現功能
1、僅僅清理圖片緩存
2、清理所有緩存文件
二、程序實現
1、僅僅清理圖片緩存
如果你只想清理圖片緩存,且是用SDWebImage加載的網絡圖片,那么你可以用SDWebImage內部封裝方法清除圖片緩存.
導入頭文件:
#import <SDImageCache.h>
獲取緩存圖片大小並異步清除圖片緩存:
//獲取緩存圖片的大小(字節) NSUInteger bytesCache = [[SDImageCache sharedImageCache] getSize]; //換算成 MB (注意iOS中的字節之間的換算是1000不是1024) float MBCache = bytesCache/1000/1000; //異步清除圖片緩存 (磁盤中的) dispatch_async(dispatch_get_global_queue(0, 0), ^{ [[SDImageCache sharedImageCache] clearDisk]; });
2、清理所有緩存文件
如果你想清理所有的緩存文件(包括圖片、視頻、音頻等), 那你可以用如下方法。需要你把caches的路徑傳過去,然后計算caches文件夾下內容的大小,然后根據其大小再判斷是否清除緩存。(根據路徑刪除文件或文件夾)
為了讓代碼看起來更整潔,這里將緩存的計算及清理封裝自定義一個工具類CleanCaches.
利用SDWebImage計算並清理緩存:
-
計算單個文件大小:
+ (float)fileSizeAtPath:(NSString *)path { NSFileManager *fileManager=[NSFileManager defaultManager]; if([fileManager fileExistsAtPath:path]){ long long size=[fileManager attributesOfItemAtPath:path error:nil].fileSize; return size/1024.0/1024.0; } return 0; }
2. 計算文件夾大小(要利用上面的1提供的方法)
+ (float)folderSizeAtPath:(NSString *)path { NSFileManager *fileManager=[NSFileManager defaultManager]; float folderSize; if ([fileManager fileExistsAtPath:path]) { NSArray *childerFiles=[fileManager subpathsAtPath:path]; for (NSString *fileName in childerFiles) { NSString *absolutePath=[path stringByAppendingPathComponent:fileName]; folderSize += [self fileSizeAtPath:absolutePath]; } // SDWebImage框架自身計算緩存的實現 folderSize+=[[SDImageCache sharedImageCache] getSize]/1024.0/1024.0; return folderSize; } return 0; }
3. 清除緩存:
+ (void)clearCache:(NSString *)path { NSFileManager *fileManager=[NSFileManager defaultManager]; if ([fileManager fileExistsAtPath:path]) { NSArray *childerFiles=[fileManager subpathsAtPath:path]; for (NSString *fileName in childerFiles) { //如有需要,加入條件,過濾掉不想刪除的文件 NSString *absolutePath=[path stringByAppendingPathComponent:fileName]; [fileManager removeItemAtPath:absolutePath error:nil]; } } [[SDImageCache sharedImageCache] cleanDisk]; }
然后只需要在所使用的控制器里調取計算和清理緩存的方法即可:
// 計算緩存大小 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cachesDir = [paths objectAtIndex:0]; float size = [CleanCaches folderSizeAtPath:cachesDir]; // 清理緩存 [CleanCaches clearCache:cachesDir];
三、壓縮文件截圖及運行效果
1、壓縮文件截圖
2、運行時的截圖
四、其他補充
界面性問題可以根據自己項目需求調整即可, 具體可參考代碼, 項目能夠直接運行! 也可以把工具類直接拖到自己項目里使用!