獲取緩存文件

作品鏈接:
http://www.reibang.com/users/1e0f5e6f73f6/top_articles

1.計算文件的大小

1.方法一

 // 總大小
    unsigned long long size = 0;
    
    // 獲得緩存文件夾路徑
    NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;
    NSString *dirpath = [cachesPath stringByAppendingPathComponent:@"Asd"];
    NSLog(@"%@",dirpath);
    // 文件管理者
    NSFileManager *mgr = [NSFileManager defaultManager];
    
    // 獲得文件夾的大小  == 獲得文件夾中所有文件的總大小 contentsOfDirectoryAtPath:  只能獲取一層
        PHLog(@"contents - %@", [mgr contentsOfDirectoryAtPath:dirpath error:nil]);
    
    // subpathsAtPath 能獲取子層的
    NSArray *subpaths = [mgr subpathsAtPath:dirpath];
    for (NSString *subpath in subpaths) {
        // 全路徑
        NSString *fullSubpath = [dirpath stringByAppendingPathComponent:subpath];
        // 累加文件大小
        size += [mgr attributesOfItemAtPath:fullSubpath error:nil].fileSize;
        
        //        NSDictionary *attrs = [mgr attributesOfItemAtPath:fullSubpath error:nil];
        //        size += [attrs[NSFileSize] unsignedIntegerValue];
    }
    
   NSLog(@"asd = %zd",size);

2.方法二

 // 總大小
    unsigned long long size = 0;
    // 緩存路徑文件夾
    NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;
    NSString *dirpath = [cachesPath stringByAppendingPathComponent:@"default"];
    NSLog(@"%@",dirpath);
    // 文件管理者
    NSFileManager *manager = [NSFileManager defaultManager];
    
    // 獲得文件夾的大小  == 獲得文件夾中所有文件的總大小
    // Enumerator : 遍歷器\迭代器
    
    NSDirectoryEnumerator *enumerator = [manager enumeratorAtPath:dirpath];
    
    for (NSString *subpath in enumerator ) {
        // 全路徑
        NSString *fullSubpath = [dirpath stringByAppendingPathComponent:subpath];
        // 累加文件大小
        size += [manager attributesOfItemAtPath:fullSubpath error:nil].fileSize;
    }
    
    NSLog(@"%zd",size);

2.清除文件的緩存

- 宏定義
#define PHCustomCacheFile [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"Custom"]

1.計算大小

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        //設(shè)置cell右邊的指示器(用來說明正在處理一些事情)
        
        UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
        [loadingView startAnimating];
        self.accessoryView = loadingView;
        
         // 設(shè)置cell默認的文字(如果設(shè)置文字之前userInteractionEnabled=NO, 那么文字會自動變成淺灰色)
        
        self.textLabel.text = @"清除緩存(正在計算緩存大小...)";
        
        self.userInteractionEnabled = NO;
        
      // 弱引用指向?qū)ο笏赖臅r候,它指向的對象就會生成空,就不會產(chǎn)生野指針瘪匿,不會產(chǎn)生壞內(nèi)存訪問。
        
       // __weak PHClearCacheCell *weakSelf = self;
        __weak typeof(self) weakSelf = self;
        
        // 在子線程計算緩存大小
        
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            
//#warning yanchi
//            [NSThread sleepForTimeInterval:3.0];
            // 獲得緩存文件夾路徑
            unsigned long long size = PHCustomCacheFile.fileSize;
            
            //unsigned long long size = @"/Users/apple/Desktop/Snip20160711_7.png".fileSize;
            
            size += [SDImageCache sharedImageCache].getSize;
            
            // 如果cell已經(jīng)銷毀了, 就直接返回
            if (weakSelf == nil) return ;
            
            NSString *sizeText = nil;
            if (size >= pow(10, 9)) { // size >= 1GB
                sizeText = [NSString stringWithFormat:@"%.2fGB", size / pow(10, 9)];
            } else if (size >= pow(10, 6)) { // 1GB > size >= 1MB
                sizeText = [NSString stringWithFormat:@"%.2fMB", size / pow(10, 6)];
            } else if (size >= pow(10, 3)) { // 1MB > size >= 1KB
                sizeText = [NSString stringWithFormat:@"%.2fKB", size / pow(10, 3)];
            } else { // 1KB > size
                sizeText = [NSString stringWithFormat:@"%zdB", size];
            }
            // 生成文字
            NSString *test = [NSString stringWithFormat:@"清除緩存(%@)",sizeText];
            
            //回到主線程
            dispatch_async(dispatch_get_main_queue(), ^{
                // 設(shè)置文字
                weakSelf.textLabel.text = test;
                // 清空右邊的指示器
                weakSelf.accessoryView = nil;
                // 顯示右邊的箭頭
                weakSelf.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
                
                // 添加手勢監(jiān)聽器
                [weakSelf addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(clearCache)]];
                // 恢復(fù)點擊事件
                weakSelf.userInteractionEnabled = YES;
            });
            
        });

    }
   
    return self;
}

2.清除緩存

- (void)clearCache
{
    // 彈出指示器
    [SVProgressHUD showWithStatus:@"正在清除緩存..." maskType:SVProgressHUDMaskTypeBlack];
    // 刪除SDWebImage的緩存
    [[SDImageCache sharedImageCache] clearDiskOnCompletion:^{
        // 刪除自定義的緩存
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            
            NSFileManager *manager = [NSFileManager defaultManager];
            [manager removeItemAtPath:PHCustomCacheFile error:nil];
            [manager createDirectoryAtPath:PHCustomCacheFile withIntermediateDirectories:YES attributes:nil error:nil];
//#warning 睡眠
  //          [NSThread sleepForTimeInterval:2.0];
            // 所有的緩存都清除完畢

            dispatch_async(dispatch_get_main_queue(), ^{
                // 隱藏指示器
                [SVProgressHUD dismiss];
                // 設(shè)置文字
                self.textLabel.text = @"清除緩存(0B)";
            });

        });
    }];
}
/**
 *  當cell重新顯示到屏幕上時, 也會調(diào)用一次layoutSubviews
 */
- (void)layoutSubviews
{
    [super layoutSubviews];
    // cell重新顯示的時候, 繼續(xù)轉(zhuǎn)圈圈
    UIActivityIndicatorView *loadingView = (UIActivityIndicatorView *)self.accessoryView;
    
    [loadingView startAnimating];
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纵朋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子操软,更是在濱河造成了極大的恐慌,老刑警劉巖聂薪,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異藏澳,居然都是意外死亡,警方通過查閱死者的電腦和手機翔悠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蓄愁,“玉大人,你說我怎么就攤上這事撮抓。” “怎么了丹拯?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長乖酬。 經(jīng)常有香客問我,道長剑刑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任施掏,我火速辦了婚禮,結(jié)果婚禮上七芭,老公的妹妹穿的比我還像新娘。我一直安慰自己狸驳,他們只是感情好缩赛,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布撰糠。 她就那樣靜靜地躺著,像睡著了一般阅酪。 火紅的嫁衣襯著肌膚如雪旨袒。 梳的紋絲不亂的頭發(fā)上术辐,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音辉词,去河邊找鬼。 笑死瑞躺,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的幢哨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嘱么,長吁一口氣:“原來是場噩夢啊……” “哼顽悼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蔚龙,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎木羹,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坑填,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年妖枚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苍在。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡荠商,死狀恐怖续誉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情酷鸦,我是刑警寧澤饰躲,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布井佑,位于F島的核電站,受9級特大地震影響躬翁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜盒发,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宁舰。 院中可真熱鬧,春花似錦蛮艰、人聲如沸腋腮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袜刷。三九已至,卻和暖如春著蟹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背萧豆。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留涮雷,地道東北人源内。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像嗽交,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子颂斜,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

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

  • 移動應(yīng)用在處理網(wǎng)絡(luò)資源時沃疮,一般都會做離線緩存處理盒让,其中以圖片緩存最為典型司蔬,其中很流行的離線緩存框架為SDWebIm...
    nkk閱讀 757評論 0 0
  • 方法1:通過目錄枚舉類NSDirectoryEnumerator NSDirectoryEnumerator : ...
    木頭Lee閱讀 5,916評論 1 10
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法俊啼,內(nèi)部類的語法,繼承相關(guān)的語法授帕,異常的語法同木,線程的語...
    子非魚_t_閱讀 31,623評論 18 399
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,077評論 25 707
  • 今天是我家悟空上學(xué)的第四天彤路。 下午校車來到家門口,未見其人先聞其聲:媽媽芥映,我回來啦!我今天有作業(yè)要寫奈偏! 旋風(fēng)一般的...
    朱和墨閱讀 716評論 0 2