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