美文网首页猿起码农之亮眼
OC清除缓存代码实例

OC清除缓存代码实例

作者: 飞天猪Pony | 来源:发表于2016-08-19 14:35 被阅读237次
#import "ViewController.h"  
  
@interface ViewController ()  
  
@end  
  
@implementation ViewController  
  
- (void)viewDidLoad {  
    [super viewDidLoad];  
      
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];  
    btn.frame = CGRectMake(100, 100, 100, 50);  
    [btn setTitle:@"清除缓存" forState:UIControlStateNormal];  
    btn.backgroundColor = [UIColor purpleColor];  
    [btn addTarget:self action:@selector(putBufferBtnClicked:) forControlEvents:UIControlEventTouchUpInside];  
    [self.view addSubview:btn];  
}  
//清除缓存按钮的点击事件  
- (void)putBufferBtnClicked:(UIButton *)btn{  
    CGFloat size = [self folderSizeAtPath:NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject] + [self folderSizeAtPath:NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).lastObject] + [self folderSizeAtPath:NSTemporaryDirectory()];  
      
    NSString *message = size > 1 ? [NSString stringWithFormat:@"缓存%.0fM, 删除缓存", size] : [NSString stringWithFormat:@"缓存%.0fK, 删除缓存", size * 1024.0];  
      
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil message:message preferredStyle:(UIAlertControllerStyleAlert)];  
      
    UIAlertAction *action = [UIAlertAction actionWithTitle:@"确定" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction *action) {  
        [self cleanCaches:NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject];  
        [self cleanCaches:NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).lastObject];  
        [self cleanCaches:NSTemporaryDirectory()];  
    }];  
      
    UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:(UIAlertActionStyleCancel) handler:nil];  
    [alert addAction:action];  
    [alert addAction:cancel];  
    [self showDetailViewController:alert sender:nil];  
}  
  
// 计算目录大小  
- (CGFloat)folderSizeAtPath:(NSString *)path{  
    // 利用NSFileManager实现对文件的管理  
    NSFileManager *manager = [NSFileManager defaultManager];  
    CGFloat size = 0;  
    if ([manager fileExistsAtPath:path]) {  
        // 获取该目录下的文件,计算其大小  
        NSArray *childrenFile = [manager subpathsAtPath:path];  
        for (NSString *fileName in childrenFile) {  
            NSString *absolutePath = [path stringByAppendingPathComponent:fileName];  
            size += [manager attributesOfItemAtPath:absolutePath error:nil].fileSize;  
        }  
        // 将大小转化为M  
        return size / 1024.0 / 1024.0;  
    }  
    return 0;  
}  
// 根据路径删除文件  
- (void)cleanCaches:(NSString *)path{  
    // 利用NSFileManager实现对文件的管理  
    NSFileManager *fileManager = [NSFileManager defaultManager];  
    if ([fileManager fileExistsAtPath:path]) {  
        // 获取该路径下面的文件名  
        NSArray *childrenFiles = [fileManager subpathsAtPath:path];  
        for (NSString *fileName in childrenFiles) {  
            // 拼接路径  
            NSString *absolutePath = [path stringByAppendingPathComponent:fileName];  
            // 将文件删除  
            [fileManager removeItemAtPath:absolutePath error:nil];  
        }  
  }  

相关文章

网友评论

    本文标题:OC清除缓存代码实例

    本文链接:https://www.haomeiwen.com/subject/phubsttx.html