app圖片緩存處理

 

緩存處理數組

SDImageCache 拿出圖片緩存的大小:[SDImageCache  sharedImageCache].getSize;緩存

 

「%@「,NSTemporaryDirectory()這個方法直接獲取沙盒地址;spa

 

🌹🌟本身寫獲取文件緩存大小:插件

1方法1;code

    1.文件對象:NSFileManager *manager = [NSFileManager defaultManager];orm

    2.項目用的是SDWebImage,因此緩存圖片地址是插件處理的,若是拿到緩存圖片路徑????對象

[manager  attributesOfItemAtPath : 圖片緩存路徑   error: nil]; //獲得的時候文件夾屬性🌟🌟🌟blog

attributesOfItemAtPath對於獲取的文件屬性是準確的,文件夾是不能獲取大小的;圖片

 

NSString *caches = [NSSearchPathForDirectoriesInDomains( NSCachesDirectory,NSUserDomainMask,YES ) lastObject]; //來到沙盒;rem

NSString *cachePath = [caches stringByAppendingPathComponent : @「default / com.hackmist.SDWebImageCache.default」];//拼接緩存文件路徑;

 

文件遍歷器:NSDirectoryEnumerator *fileEnumerator = [NSFileManager defaultManager] enumeratorAtPath : cachePath];//建立了一個文件遍歷器;

for(NSString *fileName in fileEnumerator){

//返回文件夾裏的每個文件的文件名;

NSString *filepath = [cachePath stringByAppendingPathComponent : fileName];

1.有個文件名,拼接成全路徑,再得到attributesOfItemAtPath,獲得的時候對象,  [NSFileSize ] 拿到大小,累加; 2.這個方法,會多計算一個文件夾裏的文件夾大小;

BOOL dir = NO;

[manager fileExistsAtPath : filepath  isDirectory : &dir];

if(manager fileExistsAtPath: 文件路徑 isDirectory:(*BOOL)){ &dir 傳一個地址來接收是不是文件夾;

//文件存不存在,文件是否是一個文件夾;🌟🌟🌟

}

if(dir) continue

NSString size = [[manager attributesOfItemAtPath : file path error : nil ] [ NSFileSize ] integerValue];

totalSize + = size ; //總的緩存圖片大小;

}

 

 

2.文件夾裏有文件夾

文件屬性裏有個NSFileType:NSFileTypeDirectory(文件夾) / NSFileTypRegular(文件類型)

if([attrs [ NSFileType]  isEqualToString: NSFileTypeDirectory ]) continue;

 

 

3.還有一種方法: 方法返回的是一個數組。

   NSArray *contents = [manager contentsOfDirectoryAtPath error : nil];//獲取文件夾下的全部內容(文件),不包括文件裏的文件夾;

  [manager subpathsAtPath : (NSString *)];//參數路徑——得到路徑的下的全部文件包括子路徑下的文件、文件夾。同上面的便利文件同樣;

   

 

 

最後:

使用SDWebImage處理圖片緩存

CGFloat size = [SDImageCache sharedImageCache].getSize / 1000.0 / 1000; //這個計算比較耗時;

cell.textLabel.text = [NSString stringWithFormat : @「清除緩存(已使用%.2fMB)」,size];

 

 

cell點擊時候清除緩存

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPah:(NSIndexPath *)indexPath{

[[SDImageCache sharedImageCache]  clearDisk];

}

 

 

 

//
//  XMGSettingViewController.h
//  01-百思不得姐

#import <UIKit/UIKit.h>

@interface XMGSettingViewController : UITableViewController

@end

 

//
//  XMGSettingViewController.m
//  01-百思不得姐

#import "XMGSettingViewController.h"
#import <SDImageCache.h>

@interface XMGSettingViewController ()

@end

@implementation XMGSettingViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.title = @"設置";
    self.tableView.backgroundColor = XMGGlobalBg;
}

- (void)getSize2
{
    // 圖片緩存
    NSUInteger size = [SDImageCache sharedImageCache].getSize;
    //    XMGLog(@"%zd %@", size, NSTemporaryDirectory());
    
    NSFileManager *manager = [NSFileManager defaultManager];
    
    // 文件夾
    NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    NSString *cachePath = [caches stringByAppendingPathComponent:@"default/com.hackemist.SDWebImageCache.default"];
    
    // 得到文件夾內部的全部內容
    //    NSArray *contents = [manager contentsOfDirectoryAtPath:cachePath error:nil];
    NSArray *subpaths = [manager subpathsAtPath:cachePath];
    XMGLog(@"%@", subpaths);
}

- (void)getSize
{
    NSFileManager *manager = [NSFileManager defaultManager];
    
    NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    NSString *cachePath = [caches stringByAppendingPathComponent:@"default/com.hackemist.SDWebImageCache.default"];
    
    NSDirectoryEnumerator *fileEnumerator = [manager enumeratorAtPath:cachePath];
    NSInteger totalSize = 0;
    for (NSString *fileName in fileEnumerator) {
        NSString *filepath = [cachePath stringByAppendingPathComponent:fileName];
        
//        BOOL dir = NO;
// 判斷文件的類型:文件\文件夾
//        [manager fileExistsAtPath:filepath isDirectory:&dir];
//        if (dir) continue;
        NSDictionary *attrs = [manager attributesOfItemAtPath:filepath error:nil];
        if ([attrs[NSFileType] isEqualToString:NSFileTypeDirectory]) continue;
        
        totalSize += [attrs[NSFileSize] integerValue];
    }
    XMGLog(@"%zd", totalSize);
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }
    
    CGFloat size = [SDImageCache sharedImageCache].getSize / 1000.0 / 1000;
    cell.textLabel.text = [NSString stringWithFormat:@"清除緩存(已使用%.2fMB)", size];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [[SDImageCache sharedImageCache] clearDisk];
    
//    [[NSFileManager defaultManager] removeItemAtPath:<#(NSString *)#> error:<#(NSError *__autoreleasing *)#>];
}

@end
相關文章
相關標籤/搜索