清理缓存


iOS清理缓存方法

在点击事件中调用clear方法
 
 [self clear];
// 计算单个文件缓存
- (long long) fileSizeAtPath:(NSString*) filePath{
NSFileManager* manager = [NSFileManager defaultManager];
if ([manager fileExistsAtPath:filePath])
{
    return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];
}
return 0;
}

// 计算整个目录缓存
- (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);
}

- (void)clear
{
 dispatch_async(
               dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
               , ^{
                   NSString *cachPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES) objectAtIndex:0];

                   NSArray *files = [[NSFileManager defaultManager] subpathsAtPath:cachPath];
                   NSLog(@"files :%lu",(unsigned long)[files count]);
                   for (NSString *p in files) {
                       NSError *error;
                       NSString *path = [cachPath stringByAppendingPathComponent:p];
                       if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
                           [[NSFileManager defaultManager] removeItemAtPath:path error:&error];
                       }
                   }
[self performSelectorOnMainThread:@selector(clearCacheSuccess) withObject:nil waitUntilDone:YES];});



    }

-(void)clearCacheSuccess
{
    NSLog(@"清理成功");
}