app图片缓存处理

 

缓存处理

SDImageCache 拿出图片缓存的大小:[SDImageCache  sharedImageCache].getSize;

 

“%@“,NSTemporaryDirectory()这个方法直接获取沙盒地址;

 

🌹🌟自己写获取文件缓存大小:

1方法1;

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

    2.项目用的是SDWebImage,所以缓存图片地址是插件处理的,如果拿到缓存图片路径????

[manager  attributesOfItemAtPath : 图片缓存路径   error: nil]; //得到的时候文件夹属性🌟🌟🌟

attributesOfItemAtPath对于获取的文件属性是准确的,文件夹是不能获取大小的;

 

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

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

 

 

 

 

 

 

 

posted @ 2017-06-28 16:40  laugh  阅读(1524)  评论(0编辑  收藏  举报