设置界面搭建

  • tableview 这里直接注册Cell
  • 在第一个cell中显示清除缓存
  • 在SDWebImage 和WKWebView 都有做了缓存
  • SDWebImage : 怎么做缓存, 沙盒: Cache
    • 获取Cache文件夹路径 NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
    • <SDImageCache.h> 做缓存给图片加密了, 为了保证图片不重名而被替换, 在加密的时候最好在加点盐(以时间作为盐就不容易重名)
    • <SDImageCache.h> 的头文件, 可以查到有清除缓存的方法, 学习他是怎么做清除缓存的处理
    • 获取SDWebImage缓存尺寸
  • 模仿SDWebImage获得default文件夹缓存文件大小

    • 获取这个文件夹中所有文件路径,然后累加 = 文件夹的尺寸
    • 获取Cache文件夹路径(定义宏,很多地方都有用)
    • 获取default
    • 创建(获取)文件管理者
    • 获取文件夹下所有的文件subpathsAtPath
      • 遍历文件夹下的所有文件
      • 拼接子文件全路径
      • 获取文件属性, 累加计算文件夹下所有文件尺寸
      • 注意: 排除文件夹 和 隐藏文件
    BOOL isDirectory;
    BOOL isExist = [mgr fileExistsAtPath:filePath isDirectory:&isDirectory];
    if (!isExist || isDirectory) continue;
    
  • 获取到文件大小之后做数据处理

    • 注意: 手机上文件尺寸大小的单位转换一般是用1000, 而不是1024
    NSString *str = @"清除缓存";
    if (totalSize > 1000 * 1000) { // MB
        CGFloat totalSizeF = totalSize / 1000.0 / 1000.0;
        str = [NSString stringWithFormat:@"%@(%.1fMB)",str,totalSizeF];
    } else if (totalSize > 1000) { // KB
        CGFloat totalSizeF = totalSize / 1000.0;
        str = [NSString stringWithFormat:@"%@(%.1fKB)",str,totalSizeF];
    } else if (totalSize > 0) { // B
        str = [NSString stringWithFormat:@"%@(%ldB)",str,totalSize];
    }
    
  • 点击清除缓存

    • 在选中的cell代理方法中做清除缓存
    • 获取Cache文件夹下所有文件
    // 获取文件夹下一级目录
    NSArray *subpaths = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:cachePath error:nil];
    
    • 遍历子文件, 拼接子文件目录, 并删除所有子文件
    • 刷新表格
  • 抽业务类

    • 专门搞一个类, 处理某些业务, 网络处理工具类,数据缓存,文件尺寸
    • 方法尽量改为对象方法, 这样需要使用工具类者创建个对象
    • 工具类的格式注意点有: 尽量在在.h写明工具类的通途,给每个方法写上文本注释
    • 做异常提示处理, 如果传参错误, 则会抛出异常
    • 注意: 抛异常这样的是样的操作, 再上架的时候一定不要出现, 因为有可能服务器返回的数据出错, 导致数据传进来的就是错误的, 这样程序运行时会有可能直接崩溃, 导致闪退, 因此, 抛异常最好只是在调试阶段, 这样,就要写在条件编译里面了调试才抛异常, 编译不抛异常
    NSFileManager *mgr = [NSFileManager defaultManager];
    
    BOOL isDirectory;
    BOOL isExist = [mgr fileExistsAtPath:directoryPath isDirectory:&isDirectory];
    
    // 判断文件是如果不存在 或者不是文件夹 ,则抛出异常
    if (!isExist || !isDirectory) {
        // 报错:抛异常
        NSException *excp = [NSException exceptionWithName:@"filePathError" reason:@"传错,必须传文件夹路径" userInfo:nil];
    
        [excp raise];
    }
    

    >>点击链接直接跳转到工具类中查看详细代码

results matching ""

    No results matching ""