你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開辟之消除緩存功效的完成

iOS開辟之消除緩存功效的完成

編輯:IOS開發綜合

媒介

挪動運用在處置收集資本時,普通都邑做離線緩存處置,個中以圖片緩存最為典范,個中很風行的離線緩存框架為SDWebImage。然則,離線緩存會占用手機存儲空間,所以緩存清算功效根本成為資訊、購物、浏覽類app的標配功效。

消除緩存根本上都是在設置界面的某一個Cell,因而我們可以把消除緩存封裝在某一個自界說Cell中

以下圖所示:

完成的詳細步調

應用留意:進程中須要用到第三方庫,請提早裝置好:SDWebImageSVProgressHUD

1. 創立自界說Cell,定名為GYLClearCacheCell

重寫initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier辦法,設置根本內容,如文字等等;

重要代碼以下:

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
 {
 if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
  // 設置加載視圖
  UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
  [loadingView startAnimating];
  self.AccessoryView = loadingView;

  //設置文字
  self.textLabel.text = @"清晰緩存";
  self.detailTextLabel.text = @"正在盤算"; 
 }
 return self;
}

2. 盤算緩存文件年夜小

緩存文件包含兩部門,一部門是應用SDWebImage緩存的內容,其次能夠存在自界說的文件夾中的內容(視頻,音頻等外容),因而盤算要分兩部門

重要代碼以下:

unsigned long long size =
[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"CustomFile"].fileSize;
//fileSize是封裝在Category中的。

size += [SDImageCache sharedImageCache].getSize; //CustomFile + SDWebImage 緩存

//設置文件年夜小格局
NSString sizeText = nil;
if (size >= pow(10, 9)) {
 sizeText = [NSString stringWithFormat:@"%.2fGB", size / pow(10, 9)];
}else if (size >= pow(10, 6)) {
 sizeText = [NSString stringWithFormat:@"%.2fMB", size / pow(10, 6)];
}else if (size >= pow(10, 3)) {
 sizeText = [NSString stringWithFormat:@"%.2fKB", size / pow(10, 3)];
}else {
 sizeText = [NSString stringWithFormat:@"%zdB", size];
}

上述兩個辦法都是在主線程中完成的,假如緩存文件年夜小異常年夜的話,盤算時光會比擬長,會招致運用卡逝世,斟酌到該成績,是以須要將上述代碼放到子線程中完成。

3. 添加手勢監聽

關於監聽點擊Cell可使用署理也能夠應用手勢監聽,為了將完全的功效封裝到自界說Cell中,因而我們應用手勢監聽的辦法來監聽點擊Cell。

//盤算完成後,回到主線程持續處置,顯示文件年夜小,除去加載視圖,顯示箭頭,添加點擊事宜
dispatch_async(dispatch_get_main_queue(), ^{

 self.detailTextLabel.text = [NSString stringWithFormat:@"%@",sizeText];
 self.AccessoryView = nil;
 self.AccessoryType = UITableViewCellAccessoryDisclosureIndicator;

 [self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithtarget:self action:@selector(clearCacheClick)]];   
 });

4. 消除緩存

消除緩存也是分為兩部門,一是消除SDWebImage的緩存,二是消除自界說文件緩存

重要代碼以下:

- (void)clearCacheClick
{
 [SVProgressHUD showWithStatus:@"正在消除緩存···"];
 [SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeBlack];

 [[SDImageCache sharedImageCache] clearDiskOnCompletion:^{
  dispatch_async(dispatch_get_global_queue(0, 0), ^{

   NSFileManager *mgr = [NSFileManager defaultManager];
   [mgr removeItemAtPath:GYLCustomFile error:nil];
   [mgr createDirectoryAtPath:GYLCustomFile withIntermediateDirectories:YES attributes:nil error:nil];

   dispatch_async(dispatch_get_main_queue(), ^{

    [SVProgressHUD dismiss];

    // 設置文字
    self.detailTextLabel.text = nil;    
   });   
  });
 }];
}

留意點:SDWebImage消除緩存是在子線程中停止的,消除自界說文件內容應當也放在子線程中(刪除年夜文件能夠比擬耗時),為了包管二者不抵觸,可以將刪除自界說文件內容放在SDWebImage緩存消除終了以後停止,然後再回到主線程操作。

5. 其他留意點

    a. 在盤算文件年夜小進程中應當是不許可點擊Cell的,假如有設置Cell的didSelectRowAtIndexPath辦法,那末會招致手勢監聽不克不及應用。因而須要在盤算時不克不及點擊Cell。

    b. 設置userInteractionEnabled=NO應放在設置文字以後,不然textLabel將顯示為灰色。

    c. 當盤算文件年夜小沒有停止的時,這個時刻點擊前往,自界說Cell不會被燒毀,他會履行完剩下的代碼,可使用dealloc辦法來驗證,在此情形下,可使用弱援用的self來處理。

    d. 當設置界面的cell比擬多時,假如還在盤算緩存年夜小時,消除緩存的cell從視圖中消逝,那末加載視圖動畫就會被停滯,當前往到消除緩存cell時,看不到加載動畫。處理計劃兩種辦法:一個是在cell創立的署理辦法中從新開啟動畫;另外一個是封裝到layoutSubviews辦法中。

6. 後果

總結

以上就是關於IOS中消除緩存功效完成的全體內容,願望這篇文章對列位IOS開辟者們能有所贊助,假如有疑問年夜家可以留言交換。

【iOS開辟之消除緩存功效的完成】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved