媒介
挪動運用在處置收集資本時,普通都邑做離線緩存處置,個中以圖片緩存最為典范,個中很風行的離線緩存框架為SDWebImage。然則,離線緩存會占用手機存儲空間,所以緩存清算功效根本成為資訊、購物、浏覽類app的標配功效。
消除緩存根本上都是在設置界面的某一個Cell,因而我們可以把消除緩存封裝在某一個自界說Cell中
以下圖所示:

完成的詳細步調
應用留意:進程中須要用到第三方庫,請提早裝置好:SDWebImage、SVProgressHUD。
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開辟之消除緩存功效的完成】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!