iOS中的緩存計算和清除

1.首先,一般我們項目中的緩存一般分為2大塊,一個是自己緩存的一些數據;還有一個就是我們使用的SDWebImage這個第三方庫給我們自動緩存的圖片文件緩存了**
<1>怎么計算緩存大小(主要是利用系統提供的NSFileManager類來實現)
$1.單個文件大小的計算

-(long long)fileSizeAtPath:(NSString *)path{
    NSFileManager *fileManager=[NSFileManager defaultManager];
    if([fileManager fileExistsAtPath:path]){
        long long size=[fileManager attributesOfItemAtPath:path error:nil].fileSize;
        return size;
    }
    return 0;
}

$2.文件夾大小的計算(要利用上面的$1提供的方法)

-(float)folderSizeAtPath:(NSString *)path{
    NSFileManager *fileManager=[NSFileManager defaultManager];
    NSString *cachePath=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
    cachePath=[cachePath stringByAppendingPathComponent:path];
    long long folderSize=0;
    if ([fileManager fileExistsAtPath:cachePath])
    {
        NSArray *childerFiles=[fileManager subpathsAtPath:cachePath];
        for (NSString *fileName in childerFiles)
        {
            NSString *fileAbsolutePath=[cachePath stringByAppendingPathComponent:fileName];
            long long size=[self fileSizeAtPath:fileAbsolutePath];
            folderSize += size;
            NSLog(@"fileAbsolutePath=%@",fileAbsolutePath);
            
        }
        //SDWebImage框架自身計算緩存的實現
        folderSize+=[[SDImageCache sharedImageCache] getSize];
        return folderSize/1024.0/1024.0;
    }
    return 0;
}

其中folderSize+=[[SDImageCache sharedImageCache] getSize];這行代碼是SDWebImage給我們提供的計算本地緩存圖片大小的方法....(當然了,這個方法的底層實現依然是用的NSFileManager做的)
上面2個方法結合起來使用,就可以計算我們總共產生多少緩存啦....
2.計算好了緩存,那么怎么清除呢??
//同樣也是利用NSFileManager API進行文件操作,SDWebImage框架自己實現了清理緩存操作,我們可以直接調用。

//同樣也是利用NSFileManager API進行文件操作,SDWebImage框架自己實現了清理緩存操作,我們可以直接調用。
-(void)clearCache:(NSString *)path{
    NSString *cachePath=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
    cachePath=[cachePath stringByAppendingPathComponent:path];
    
    NSFileManager *fileManager=[NSFileManager defaultManager];
    if ([fileManager fileExistsAtPath:cachePath]) {
        NSArray *childerFiles=[fileManager subpathsAtPath:cachePath];
        for (NSString *fileName in childerFiles) {
            //如有需要,加入條件,過濾掉不想刪除的文件
            NSString *fileAbsolutePath=[cachePath stringByAppendingPathComponent:fileName];
            NSLog(@"fileAbsolutePath=%@",fileAbsolutePath);
            [fileManager removeItemAtPath:fileAbsolutePath error:nil];
        }
    }
    [[SDImageCache sharedImageCache] cleanDisk];
}

上面再清楚換存的時候也清除了2塊地方,一個是我們自己緩存的文件夾;還有就是SDWebImage給我們緩存的圖片文件....

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容