记录一下iOS开发中的设置界面经常用到的清理缓存功能的代码实现。
一、流程介绍
缓存文件存到了沙盒目录中后即出现缓存,在开发中需要拼接缓存文件所在目录,然后计算缓存文件大小并进行显示,最后在点击时移除缓存文件。
这次的清除缓存为视频和录音缓存文件,其中视频缓存文件所在路经如图1所示,录音缓存文件路径如图2所示
二、代码编写
1.计算目录中缓存文件的大小
/**
TODO:计算文件夹的文件大小
@param path路径
@return文件大小
*/
- (float)folderSizeAtPath:(NSString *)path{
NSFileManager *fileManager = [NSFileManager defaultManager]; //创建文件管理器
NSDirectoryEnumerator *dir = [fileManager enumeratorAtPath:path]; // 获取目录下的文件
CGFloat size_file = 0;
//遍历目录下的文件
while ([dir nextObject]) {
size_file += [dir.fileAttributes[@"NSFileSize"] longLongValue];//获取缓存文件大小
}
return size_file;
}
2.拼接目录地址并获取缓存大小
/**
TODO:获取缓存大小
@return 缓存大小
*/
- (NSString *)getVideoCacheAndAudioCache
{
//拼接路径
CGFloataudioCache_size = [self folderSizeAtPath:[[[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask,YES) firstObject] stringByAppendingPathComponent:@"Caches"] stringByAppendingPathComponent:@"VoiceCache"]];
CGFloatvideo_size = [selffolderSizeAtPath:[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) firstObject] stringByAppendingPathComponent:@"VideoCache"]];
return [NSStringstringWithFormat:@"%.2fMB",(audioCache_size+video_size)/1024.0f/1024.0f];
}
3.在CellForRowAtIndexPath中显示缓存大小
cell.resultLabel.text= [NSStringstringWithFormat:@"%@", [self getVideoCacheAndAudioCache]];
4.清除缓存实现方法
/**
TODO:清除缓存
@return
*/
- (void)removePath:(NSString*)path
{
NSFileManager *fm = [NSFileManager defaultManager];//创建文件管理器
BOOL exist = [fm fileExistsAtPath:path];//判断路径下的路径是否存在
NSError *err;
if (exist) {
[fm removeItemAtPath:path error:&err];//移除此文件夹
NSLog(@"file deleted");
if (err) {
NSLog(@"file remove error, %@", err.localizedDescription );
}
} else {
NSLog(@"no file by that name");
}
}
5.拼接并获取缓存路径
/**
TODO:获取缓存路径
@return
*/
- (void)deleteVideoCacheAndAudioCache{
//拼接路径
[self removePath:[[[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"Caches"] stringByAppendingPathComponent:@"VoiceCache"]];
[self removePath:[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"VideoCache"]];
}
6.在didSelectRowAtIndexPath中调用方法清除缓存
[self deleteVideoCacheAndAudioCache];
清除缓存即可完成