iOS开发过程中经常会使用到获取缓存和清理缓存的功能,给出一个示例做为参考。
方法/步骤
-
1
首先定义一个缓存管理类CachesManager继承于NSObject,为了方便调用使用单例模式,CachesManager.h中定义三个方法,分别为单例方法、获取缓存大小的方法以及清理缓存的方法,具体如下:
+ (CachesManager *)sharedManager;
- (BOOL)clearCaches;
- (NSString *)getAllTheCacheFileSize;
-
2
单例实现如下:
static CachesManager *_cachesManager = nil;
@implementation CachesManager
{
NSString *_cachesDirPath;
}
- (instancetype)init {
if (self = [super init]) {
NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
_cachesDirPath = [cachesPath copy];
}
return self;
}
+ (CachesManager *)sharedManager {
if (_cachesManager == nil) {
@synchronized(self) {
if (_cachesManager == nil) {
_cachesManager = [[[self class] alloc] init];
}
}
}
return _cachesManager;
}
-
3
根据文件夹路径获取文件大小:
- (long long)fileSizeAtPath:(NSString*) filePath{
NSFileManager* manager = [NSFileManager defaultManager];
if ([manager fileExistsAtPath:filePath]){
return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];
}
return 0;
}
-
4
遍历整个项目文件夹数获取所有文件大小:
- (float)requestCachesFileSize {
NSFileManager* manager = [NSFileManager defaultManager];
if (![manager fileExistsAtPath:_cachesDirPath]) return 0;
NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath:_cachesDirPath] objectEnumerator];
NSString* fileName;
long long folderSize = 0;
while ((fileName = [childFilesEnumerator nextObject]) != nil){
NSString* fileAbsolutePath = [_cachesDirPath stringByAppendingPathComponent:fileName];
folderSize += [self fileSizeAtPath:fileAbsolutePath];
}
return folderSize/(1024.0*1024.0);
}
-
5
获取缓存文件大小,精确到小数点后两位,单位为M。
- (NSString *)getAllTheCacheFileSize
{
return [NSString stringWithFormat:@"%.2f MB",[self requestCachesFileSize]];
}
-
6
清理缓存文件的实现,如果获取到缓存文件大小大于0,则进行清理操作。
- (BOOL)clearCaches {
if([self requestCachesFileSize] > 0) {
NSArray *files = [[NSFileManager defaultManager] subpathsAtPath:_cachesDirPath];
for (NSString *file in files) {
NSString *path = [_cachesDirPath stringByAppendingPathComponent:file];
if([[NSFileManager defaultManager] fileExistsAtPath:path]) {
[[NSFileManager defaultManager] removeItemAtPath:path error:nil];
}
}
return YES;
} else {
return NO;
}
}
-
7
在viewDidLoad中定义文本显示缓存大小,调用示例如下:
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, SCREEN_WIDTH, 50)];
[self.view addSubview:label];
NSString *strCash = [[CachesManager sharedManager] getAllTheCacheFileSize];
label.text = strCash;
label.textAlignment = NSTextAlignmentCenter;
[[CachesManager sharedManager] clearCaches];
END
文章评论