美文网首页iOS学习笔记iOS Developer
iOS中计算缓存大小并清除缓存

iOS中计算缓存大小并清除缓存

作者: 是刺猬 | 来源:发表于2016-11-30 18:47 被阅读0次

        记录一下iOS开发中的设置界面经常用到的清理缓存功能的代码实现。

一、流程介绍

        缓存文件存到了沙盒目录中后即出现缓存,在开发中需要拼接缓存文件所在目录,然后计算缓存文件大小并进行显示,最后在点击时移除缓存文件。

        这次的清除缓存为视频和录音缓存文件,其中视频缓存文件所在路经如图1所示,录音缓存文件路径如图2所示

图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];

清除缓存即可完成

相关文章

网友评论

    本文标题:iOS中计算缓存大小并清除缓存

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