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

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

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)系作者
  • 序言:七十年代末奕纫,一起剝皮案震驚了整個(gè)濱河市提陶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌匹层,老刑警劉巖隙笆,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異升筏,居然都是意外死亡撑柔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門您访,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铅忿,“玉大人,你說我怎么就攤上這事灵汪√囱担” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵享言,是天一觀的道長峻凫。 經(jīng)常有香客問我,道長览露,這世上最難降的妖魔是什么荧琼? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮差牛,結(jié)果婚禮上命锄,老公的妹妹穿的比我還像新娘。我一直安慰自己多糠,他們只是感情好累舷,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著夹孔,像睡著了一般被盈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搭伤,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天只怎,我揣著相機(jī)與錄音,去河邊找鬼怜俐。 笑死身堡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拍鲤。 我是一名探鬼主播贴谎,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼汞扎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了擅这?” 一聲冷哼從身側(cè)響起澈魄,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仲翎,沒想到半個(gè)月后痹扇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡溯香,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年鲫构,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玫坛。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡结笨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出昂秃,到底是詐尸還是另有隱情禀梳,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布肠骆,位于F島的核電站算途,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蚀腿。R本人自食惡果不足惜嘴瓤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望莉钙。 院中可真熱鬧廓脆,春花似錦、人聲如沸磁玉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚊伞。三九已至席赂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間时迫,已是汗流浹背颅停。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掠拳,地道東北人癞揉。 一個(gè)月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親喊熟。 傳聞我的和親對象是個(gè)殘疾皇子柏肪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

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