iOS利用SDWebImage實現緩存的計算與清理

概述

能夠僅僅清理圖片緩存, 也能夠清理全部的緩存文件(包括圖片、視頻、音頻等).

詳細

通常咱們項目中的緩存通常分爲2大塊:一個是本身緩存的一些數據;還有一個就是咱們使用的SDWebImage這個第三方庫給咱們自動緩存的圖片文件緩存了.html

 

實際項目中會配合設置裏去清理緩存, 效果截圖以下:緩存

實際項目截圖.jpeg

1、實現功能

一、僅僅清理圖片緩存網絡

二、清理全部緩存文件框架

2、程序實現

一、僅僅清理圖片緩存異步

若是你只想清理圖片緩存,且是用SDWebImage加載的網絡圖片,那麼你能夠用SDWebImage內部封裝方法清除圖片緩存.async

導入頭文件:工具

#import <SDImageCache.h>

獲取緩存圖片大小並異步清除圖片緩存:spa

//獲取緩存圖片的大小(字節)
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];
});

 

二、清理全部緩存文件視頻

若是你想清理全部的緩存文件(包括圖片、視頻、音頻等), 那你能夠用以下方法。須要你把caches的路徑傳過去,而後計算caches文件夾下內容的大小,而後根據其大小再判斷是否清除緩存。(根據路徑刪除文件或文件夾)htm

爲了讓代碼看起來更整潔,這裏將緩存的計算及清理封裝自定義一個工具類CleanCaches.

利用SDWebImage計算並清理緩存:

  1. 計算單個文件大小:

+ (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];

3、壓縮文件截圖及運行效果

一、壓縮文件截圖

4F8B5D05-B8C2-4CA7-A21A-A071BCC3511C.png

二、運行時的截圖

Demo 截圖.png

4、其餘補充

界面性問題能夠根據本身項目需求調整便可, 具體可參考代碼, 項目可以直接運行! 也能夠把工具類直接拖到本身項目裏使用!

 

注:本文著做權歸做者,由demo大師發表,拒絕轉載,轉載須要做者受權

相關文章
相關標籤/搜索