清理缓存

2016-06-14  本文已影响46人  pingui

每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用的文件系统隔离,ios系统不允许访问其他应用的应用沙盒。在ios8中已经开放访问。

应用沙盒一般包括以下几个文件目录:应用程序包、Documents、Libaray(下面有Caches和Preferences目录)、tmp。

应用程序包:包含所有的资源文件和可执行文件。

Documents:保存应用运行时生成的需要持久化的数据,iTunes会自动备份该目录。苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录

tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也有可能会清除该目录下的文件,iTunes不会同步该目录。iphone重启时,该目录下的文件会丢失。

Library:存储程序的默认设置和其他状态信息,iTunes会自动备份该目录。

Libaray/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除。一般存放体积比较大,不是特别重要的资源。

Libaray/Preferences:保存应用的所有偏好设置,ios的Settings(设置)应用会在该目录中查找应用的设置信息,iTunes会自动备份该目录。

说明: 以上内容摘抄

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSString *cacheStr = [NSString stringWithFormat:@"%.2fMB",[self filePath]];
    
    // 显示缓存大小
    self.caceLabel.text = cacheStr;
}
// 返回文件大小
- (float)filePath{
    // 获取文件目录
    NSString *cachPath = [NSSearchPathForDirectoriesInDomains ( NSCachesDirectory, NSUserDomainMask, YES) firstObject];
    return [self folderSizeAtPath:cachPath];
}
// 遍历文件夹获得文件夹大小, 返回多少 M
- (float) folderSizeAtPath:( NSString *) folderPath{
    NSFileManager *manager = [NSFileManager defaultManager];
    if (![manager fileExistsAtPath:folderPath]){
        return 0;
    }
    NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath:folderPath] objectEnumerator];
    NSString * fileName;
    long long folderSize = 0 ;
    while ((fileName = [childFilesEnumerator nextObject]) != nil ){
        NSString *fileAbsolutePath = [folderPath stringByAppendingPathComponent :fileName];
        folderSize += [self fileSizeAtPath:fileAbsolutePath];
    }
    return folderSize / (1024.0 * 1024.0);
}
- (long long) fileSizeAtPath:( NSString *) filePath{
    NSFileManager *manager = [NSFileManager defaultManager];
    if ([manager fileExistsAtPath :filePath]){
        return [[manager attributesOfItemAtPath:filePath error : nil] fileSize ];
    }
    return 0;
}
// 按钮点击事件 storyboard
- (IBAction)clear:(UIButton *)sender {
    [self clearFile];
}
- (void) clearFile{
    NSString *cachPath = [NSSearchPathForDirectoriesInDomains ( NSCachesDirectory, NSUserDomainMask, YES) firstObject];
    NSArray *files = [[NSFileManager defaultManager] subpathsAtPath :cachPath];
    for ( NSString *p in files) {
        NSError *error = nil ;
        NSString *path = [cachPath stringByAppendingPathComponent:p];
        if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
            [[NSFileManager defaultManager] removeItemAtPath:path error :&error];
        }
    }
    // 清理完成后刷新界面
    [self performSelectorOnMainThread:@selector(clearCachSuccess) withObject:nil waitUntilDone:YES];
}
- (void)clearCachSuccess{
    NSString *str = [NSString stringWithFormat:@"%.2fMB",[self filePath]];
    self.caceLabel.text = str;
}

链接: http://pan.baidu.com/s/1pLKRJuF 密码: 24mg

上一篇 下一篇

猜你喜欢

热点阅读