iOS--計(jì)算緩存就漾、清除緩存

幾乎每個(gè)應(yīng)用都有清除緩存的功能,一個(gè)應(yīng)用的使用難免會(huì)產(chǎn)生緩存赌髓,如文件緩存从藤、圖片緩存催跪,我們大部分應(yīng)用使用的SDWebImage就緩存了許多圖片,當(dāng)然它也提供的清除圖片緩存的功能夷野,這里我們介紹使用系統(tǒng)方法清除(肯定的懊蒸,SDWebImage清除緩存也是封裝的系統(tǒng)方法)為了提高應(yīng)用性能,用戶體驗(yàn)的友好悯搔,清除緩存勢(shì)在必得骑丸!

設(shè)置-清除緩存

個(gè)人喜歡把一些實(shí)用方法封裝在工具類當(dāng)中,以便在下個(gè)項(xiàng)目中拖過去用就行妒貌,廢話不多說通危,直接上代碼,先在.h文件擬好類的方法名:

1.獲取某個(gè)文件緩存大小
+(long long)fileSizeWithPath:(NSString *)filePath;

2.獲取整個(gè)緩存大小
+ (NSString *)getAllCacheSize;

3.清除所有緩存,清除完成回調(diào)一個(gè)block
+ (void)removeCache:(void(^)())removeComplete;

.m文件代碼實(shí)現(xiàn):

//獲取單個(gè)文件方法特意提出來寫灌曙,方便以后可以有這種業(yè)務(wù)需求
+(long long)fileSizeWithPath:(NSString *)filePath{
    
    NSFileManager *manager = [NSFileManager defaultManager];
    
    if ([manager fileExistsAtPath :filePath]){
        
        return [[manager attributesOfItemAtPath :filePath error : nil ] fileSize];
    }
    return 0 ;
    
}

獲取整個(gè)緩存文件大小菊碟,我這直接返回了NSSring類型,因?yàn)榉奖阄易约喉?xiàng)目的使用在刺,當(dāng)然你可以仿造上面方法用long long類型接收逆害。毋庸置疑,獲取整個(gè)緩存文件就是遍歷 所有的單個(gè)文件緩存:

+ (NSString *)getAllCacheSize
{
    //獲取緩存路徑
    NSString *cachePath = [NSSearchPathForDirectoriesInDomains (NSCachesDirectory , NSUserDomainMask , YES) firstObject];
    NSLog(@"路徑:%@",cachePath);
    //創(chuàng)建文件管理對(duì)象
    NSFileManager *filemanager = [NSFileManager defaultManager];
    //判斷路徑不存在蚣驼,返回0.00M
    if (![filemanager fileExistsAtPath :cachePath]) return @"0.00M" ;
    NSEnumerator *childFilesEnumerator = [[filemanager subpathsAtPath :cachePath] objectEnumerator];
    NSString *fileName;
    long long sumSize = 0;
    //遍歷所有子文件
    while ((fileName = [childFilesEnumerator nextObject]) != nil ){
        //拼接完整路徑
        NSString * fileAbsolutePath = [cachePath stringByAppendingPathComponent :fileName];
        //計(jì)算文件的大小
        sumSize += [ self fileSizeWithPath :fileAbsolutePath];
    }
    
    float size_m = sumSize/(1024.00*1024.00);//注意:如果你要保持浮點(diǎn)型魄幕,1024必須帶小數(shù)點(diǎn),不然得到的是int類型颖杏;或者強(qiáng)制轉(zhuǎn)換(float)sumSize/(1024*1024)
    return [NSString stringWithFormat:@"%.2fM",size_m];
}

異步清理緩存:

+ (void)removeCache:(void(^)())removeComplete
{
    //異步
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        //文件路徑
        NSString *directoryPath=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
        
        NSArray *subpaths = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directoryPath error:nil];
        //循環(huán)子路徑清除
        for (NSString *subPath in subpaths) {
            NSString *filePath = [directoryPath stringByAppendingPathComponent:subPath];
            [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil];
        }
        //返回主線程
        dispatch_async(dispatch_get_main_queue(), ^{
            if (removeComplete) {
                removeComplete();//可在此block做UI刷新操作纯陨,如果用了異步,UI操作必須返回主線程
            }
        });
    });
}

到這里計(jì)算留储、清除的方法已經(jīng)OK了翼抠,一句代碼直接調(diào)用就行,是不是很簡單欲鹏,這里就不再啰嗦了机久。

額外:

由于筆者好奇,通過網(wǎng)上一大堆資料赔嚎,找出了其他不同的方法膘盖,代碼如下:

//獲取緩存方法
+ (NSString *)getAllCacheSize{
//定義變量存儲(chǔ)總的緩存大小
    long long sumSize = 0;
    
    //獲取當(dāng)前緩存路徑
    NSString *cacheFilePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches"];
    NSLog(@"路徑:%@",cacheFilePath);
    //創(chuàng)建文件管理對(duì)象
    NSFileManager *filemanager = [NSFileManager defaultManager];
    
    //獲取當(dāng)前緩存路徑下的所有子路徑
    NSArray *subPaths = [filemanager subpathsOfDirectoryAtPath:cacheFilePath error:nil];
    
    //遍歷所有子文件
    for (NSString *subPath in subPaths) {
        //1).拼接完整路徑
        NSString *filePath = [cacheFilePath stringByAppendingFormat:@"/%@",subPath];
        //2).計(jì)算文件的大小
        long long fileSize = [[filemanager attributesOfItemAtPath:filePath error:nil]fileSize];
        //3).加載到文件的大小
        sumSize += fileSize;
    }
    float size_m = sumSize/(1024.00*1024.00);
    return [NSString stringWithFormat:@"%.2fM",size_m];
}
//刪除緩存方法
+ (void)removeCache{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *cacheFilePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches"];
    [fileManager removeItemAtPath:cacheFilePath error:nil];

}

通過筆者測(cè)試,該方法獲取的緩存大小少于第一種方法尤误,刪除也是刪除相應(yīng)方法獲取的緩存侠畔。該方法應(yīng)該只是獲取Caches里面的圖片緩存,并沒有計(jì)算其他文件的緩存损晤;如有大神清楚软棺,請(qǐng)不吝賜教!小生萬分感謝尤勋!

轉(zhuǎn)載請(qǐng)注明出處:http://www.reibang.com/p/94ae5c038ed7

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喘落,一起剝皮案震驚了整個(gè)濱河市茵宪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瘦棋,老刑警劉巖稀火,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異赌朋,居然都是意外死亡凰狞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門沛慢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赡若,“玉大人,你說我怎么就攤上這事团甲∮舛” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵躺苦,是天一觀的道長粉渠。 經(jīng)常有香客問我,道長圾另,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任雕沉,我火速辦了婚禮集乔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坡椒。我一直安慰自己扰路,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布倔叼。 她就那樣靜靜地躺著汗唱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪丈攒。 梳的紋絲不亂的頭發(fā)上哩罪,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音巡验,去河邊找鬼际插。 笑死,一個(gè)胖子當(dāng)著我的面吹牛显设,可吹牛的內(nèi)容都是我干的框弛。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼捕捂,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼瑟枫!你這毒婦竟也來了斗搞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤慷妙,失蹤者是張志新(化名)和其女友劉穎僻焚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體景殷,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡溅呢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了猿挚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咐旧。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖绩蜻,靈堂內(nèi)的尸體忽然破棺而出铣墨,到底是詐尸還是另有隱情,我是刑警寧澤办绝,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布伊约,位于F島的核電站,受9級(jí)特大地震影響孕蝉,放射性物質(zhì)發(fā)生泄漏屡律。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一降淮、第九天 我趴在偏房一處隱蔽的房頂上張望超埋。 院中可真熱鬧,春花似錦佳鳖、人聲如沸霍殴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽来庭。三九已至,卻和暖如春穿挨,著一層夾襖步出監(jiān)牢的瞬間月弛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國打工絮蒿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尊搬,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓土涝,卻偏偏與公主長得像佛寿,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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

  • 獲取緩存文件的大小 由于緩存文件存在沙箱中冀泻,我們可以通過NSFileManager API來實(shí)現(xiàn)對(duì)緩存文件大小的計(jì)...
    我在鄱陽湖邊閱讀 228評(píng)論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理常侣,服務(wù)發(fā)現(xiàn),斷路器弹渔,智...
    卡卡羅2017閱讀 134,600評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,519評(píng)論 25 707
  • 不要害怕拒絕他人胳施,當(dāng)一個(gè)人開口提出要求的時(shí)候,他的心里早就預(yù)備好了兩種答案肢专。所以舞肆,給他其中任何一個(gè)答案,都是意料中...
    你我123閱讀 153評(píng)論 0 0
  • 如何閱讀一首詩 昨天談了詩的主題博杖,純屬個(gè)人見解椿胯,不具有任何代表性。今天趁著手熱再來談?wù)勅绾伍喿x一首詩剃根。 當(dāng)我看到一...
    先鋒詩潮閱讀 616評(píng)論 2 1