1. 程式人生 > 程式設計 >iOS開發之1行程式碼實現快取計算及清除快取

iOS開發之1行程式碼實現快取計算及清除快取

話不多說,直接擼程式碼

//
// gzhCache.h
// cache
//
// Created by 郭志賀 on 2020/5/27.
// Copyright © 2020 郭志賀. All rights reserved.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface gzhCache : NSObject

/// 計算快取大小
+(float)filePath;

/// 清理快取
+(void)clearCache;
@end

NS_ASSUME_NONNULL_END
//
// gzhCache.m
// cache
//
// Created by 郭志賀 on 2020/5/27.
// Copyright © 2020 郭志賀. All rights reserved.
//

#import "gzhCache.h"

@implementation gzhCache
// 顯示快取大小
+ (float)filePath {
  NSString * cachPath = [ NSSearchPathForDirectoriesInDomains ( NSCachesDirectory,NSUserDomainMask,YES ) firstObject ];

  return [ self folderSizeAtPath :cachPath];
}
//計算單個檔案的大小
+ (long long) fileSizeAtPath:( NSString *) filePath{
  NSFileManager * manager = [ NSFileManager defaultManager ];
  if ([manager fileExistsAtPath :filePath]){
    return [[manager attributesOfItemAtPath :filePath error : nil ] fileSize ];
  }
  return 0 ;
}
//遍歷資料夾獲得資料夾大小,返回多少M
+ (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)clearCache {
  NSString * cachPath = [ NSSearchPathForDirectoriesInDomains ( NSCachesDirectory,YES ) firstObject ];
  NSArray * files = [[ NSFileManager defaultManager ] subpathsAtPath :cachPath];
  NSLog ( @"cachpath = %@",cachPath);
  for ( NSString * p in files) {
    NSError * error = nil ;
    NSString * path = [cachPath stringByAppendingPathComponent :p];
    if ([[ NSFileManager defaultManager ] fileExistsAtPath :path]) {
      [[ NSFileManager defaultManager ] removeItemAtPath :path error :&error];
    }
  }
  [ self performSelectorOnMainThread : @selector (clearCachSuccess) withObject : nil waitUntilDone : YES ];
}
+ (void)clearCachSuccess {
  NSLog(@"清理成功");
}
@end

需要查詢大小的地方使用:

NSString *str = [NSString stringWithFormat:@"%.2fM",[gzhCache filePath]];

清理的方法呼叫

[gzhCache clearCache];

以上內容僅代表本菜鳥看法,複製可直接使用。如有不妥之處敬請告知。

好了,到此這篇iOS開發之1行程式碼實現快取計算及清除快取的文章就介紹到這了,更多相關iOS快取計算及清除快取內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!