iOS利用SDWebImage實(shí)現(xiàn)緩存的計(jì)算與清理

一般我們項(xiàng)目中的緩存一般分為2大塊:一個(gè)是自己緩存的一些數(shù)據(jù);還有一個(gè)就是我們使用的SDWebImage這個(gè)第三方庫給我們自動緩存的圖片文件緩存了。

1、僅僅清理圖片緩存

如果你只想清理圖片緩存,且是用SDWebImage加載的網(wǎng)絡(luò)圖片,那么你可以用SDWebImage內(nèi)部封裝方法清除圖片緩存

//導(dǎo)入頭文件
#import <SDImageCache.h> 

//獲取緩存圖片的大小(字節(jié))
NSUInteger bytesCache = [[SDImageCache sharedImageCache] getSize];

//換算成 MB (注意iOS中的字節(jié)之間的換算是1000不是1024)
float MBCache = bytesCache/1000/1000;

//異步清除圖片緩存 (磁盤中的)
dispatch_async(dispatch_get_global_queue(0, 0), ^{

    [[SDImageCache sharedImageCache] clearDisk];
});

2、清理所有緩存文件

如果你想清理所有的緩存文件(包括圖片、視頻、音頻等), 那你可以用如下方法。需要你把caches的路徑傳過去,然后計(jì)算caches文件夾下內(nèi)容的大小,然后根據(jù)其大小再判斷是否清除緩存。(根據(jù)路徑刪除文件或文件夾)

為了讓代碼看起來更整潔,這里將緩存的計(jì)算及清理封裝自定義一個(gè)工具類:

//  利用SDWebImage計(jì)算并清理緩存

#import <Foundation/Foundation.h>

@interface QTXCleanCaches : NSObject

+ (float)fileSizeAtPath:(NSString *)path;

+ (float)folderSizeAtPath:(NSString *)path;

+ (void)clearCache:(NSString *)path;

@end
#import "QTXCleanCaches.h"
#import "SDImageCache.h"

@implementation QTXCleanCaches

// 1.計(jì)算單個(gè)文件大小
+ (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.計(jì)算文件夾大小(要利用上面的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框架自身計(jì)算緩存的實(shí)現(xiàn)
        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];
}

@end

只需要在所使用的控制器里調(diào)取計(jì)算和清理緩存的方法即可:

#import "QTXSetupController.h"
#import "QTXAlterView.h"
#import "QTXCleanCaches.h"

@interface QTXSetupController () <QTXAlterViewDelegate>

@end
// 在清理緩存的點(diǎn)擊事件里處理

// 1.計(jì)算緩存大小
 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
 NSString *cachesDir = [paths objectAtIndex:0];
 float size = [QTXCleanCaches folderSizeAtPath:cachesDir];

// 2.這里是我自定義的彈框QTXAlterView,可以選擇系統(tǒng)自帶的使用     
QTXAlterView *alter = [[QTXAlterView alloc] initWithMessage:[NSString stringWithFormat:@"已清理%.2lfM緩存", size] delegate:self rightButtonTitle:@"確定" otherButtonTitles:nil];
[alter show];
 // 清理緩存
 [QTXCleanCaches clearCache:cachesDir];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容