iOS如何获取应用缓存大小和清理缓存

2022年4月22日 22点热度 0人点赞

iOS开发过程中经常会使用到获取缓存和清理缓存的功能,给出一个示例做为参考。

工具/原料

  • Xcode
  • iPhone

方法/步骤

  1. 1

    首先定义一个缓存管理类CachesManager继承于NSObject,为了方便调用使用单例模式,CachesManager.h中定义三个方法,分别为单例方法、获取缓存大小的方法以及清理缓存的方法,具体如下:

    + (CachesManager *)sharedManager;

    - (BOOL)clearCaches;

    - (NSString *)getAllTheCacheFileSize;

  2. 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. 3

    根据文件夹路径获取文件大小:

    - (long long)fileSizeAtPath:(NSString*) filePath{

        NSFileManager* manager = [NSFileManager defaultManager];

        if ([manager fileExistsAtPath:filePath]){

            return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];

        }

        return 0;

    }

  4. 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. 5

    获取缓存文件大小,精确到小数点后两位,单位为M。

    - (NSString *)getAllTheCacheFileSize 

    {

        return [NSString stringWithFormat:@"%.2f MB",[self requestCachesFileSize]];

    }

  6. 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. 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
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部

laozhao

这个人很懒,什么都没留下

文章评论