iOS開發-清理緩存功能的實現


移動應用在處理網絡資源時,一般都會做離線緩存處理,其中以圖片緩存最為典型,其中很流行的離線緩存框架為SDWebImage。

但是,離線緩存會占用手機存儲空間,所以緩存清理功能基本成為資訊、購物、閱讀類app的標配功能。

今天介紹的離線緩存功能的實現,主要分為緩存文件大小的獲取、刪除緩存文件的實現。

獲取緩存文件的大小

由於緩存文件存在沙箱中,我們可以通過NSFileManager API來實現對緩存文件大小的計算。

計算單個文件大小

 

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

 

計算目錄大小

 

+(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 +=[FileService fileSizeAtPath:absolutePath];
        }
     //SDWebImage框架自身計算緩存的實現 folderSize
+=[[SDImageCache sharedImageCache] getSize]/1024.0/1024.0; return folderSize; } return 0; }

 

清理緩存文件

同樣也是利用NSFileManager API進行文件操作,SDWebImage框架自己實現了清理緩存操作,我們可以直接調用。

 

 

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

 

 

實現效果:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM