HYBNetworking缓存管理实战:查询缓存大小、手动清除与自动清理策略
【免费下载链接】HYBNetworking基于AFNetworking3.0以上版本封装的网络层。提供常用的GET/POST接口、上传下载图片、文件接口、支持缓存等。项目地址: https://gitcode.com/gh_mirrors/hy/HYBNetworking
HYBNetworking 是一款基于 AFNetworking 3.0 以上版本封装的 iOS 网络库,在提供 GET/POST、上传下载等常用接口的同时,内置了网络缓存能力。本文带你用最短的篇幅掌握 HYBNetworking 缓存管理的三大核心操作:查询缓存大小、手动清除缓存、自动清理策略配置,让你对应用占用的缓存空间了如指掌。
为什么需要管理 HYBNetworking 网络缓存?
缓存能加速请求、节省流量,但缓存文件只增不减时,会持续占用应用存储空间。合理使用 HYBNetworking 的缓存管理 API,可以做到:
| 场景 | 对应能力 |
|---|---|
| 在"设置"页展示"当前缓存 xx MB" | 查询缓存大小 |
| 提供"清除缓存"按钮释放空间 | 手动清除缓存 |
| 限制缓存上限,防止无限增长 | 自动清理策略 |
| 无网时读取上次数据、按需刷新 | 缓存开关与刷新参数 |
💡 HYBNetworking 默认只缓存 GET 请求的数据,POST 请求需要手动开启缓存。
HYBNetworking 缓存机制的 3 个关键点
在动手之前,先了解缓存是怎么存的(源码见HYBNetworking/HYBNetworking.m):
- 统一缓存目录:所有缓存文件都存放在沙盒的
Documents/HYBNetworkingCaches目录下(见cachePath(),HYBNetworking/HYBNetworking.m第 113–115 行)。 - URL 的 MD5 作为缓存键:请求成功的数据会转成 JSON,以"完整 URL + 参数"的 MD5 值命名存储文件;下次同样请求可直接命中磁盘缓存。
- 默认只缓存 GET:静态变量
sg_cacheGet默认为 YES,sg_cachePost默认为 NO,可通过 API 调整。
如何查询 HYBNetworking 缓存大小?
调用类方法+ totalCacheSize即可拿到所有缓存文件的总字节数(unsigned long long类型,单位为 bytes)。
API 声明位于HYBNetworking/HYBNetworking.h第 122–129 行,实现在HYBNetworking/HYBNetworking.m第 132–156 行:它遍历缓存目录下每个文件,累加文件大小。
// 查询 HYBNetworking 缓存总大小(单位:bytes) unsigned long long size = [HYBNetworking totalCacheSize]; NSLog(@"当前缓存大小: %llu bytes", size);项目自带的 Demo 中也有这样的用法,可以参考AFNetworkingDemo/ViewController.m第 101 行。
小技巧:展示给用户时换算成 MB 更直观,例如
size / 1024.0 / 1024.0。
如何手动清除 HYBNetworking 缓存?
当用户点击"清除缓存"时,调用类方法+ clearCaches即可一键清空整个HYBNetworkingCaches目录。
该 API 在HYBNetworking/HYBNetworking.h第 139–144 行声明,实现位于HYBNetworking/HYBNetworking.m第 117–130 行:如果缓存目录存在,则整体删除,并在日志中输出清理结果。
// 一键清除 HYBNetworking 全部网络缓存 [HYBNetworking clearCaches];⚠️ 注意:clearCaches是全量清除,不区分接口。清除后,下次请求会重新走网络并重建缓存。
如何配置自动清理缓存策略?
手动清理依赖用户操作,更稳妥的做法是设置自动清理策略:给缓存指定一个上限大小(单位 MB),当缓存达到上限时,应用每次启动都会自动尝试清理。
调用类方法+ autoToClearCacheWithLimitedToSize:(声明见HYBNetworking/HYBNetworking.h第 131–137 行):
// 设置缓存上限为 10MB,超过则启动时自动清理 [HYBNetworking autoToClearCacheWithLimitedToSize:10];几个关键细节(实现见HYBNetworking/HYBNetworking.m第 57、61–73 行):
- 上限为 0 表示不清理:
sg_maxCacheSize默认值为 0,即默认不启用自动清理,需显式设置一个大于 0 的值才生效。 - 清理时机在应用启动阶段:内部逻辑会在启动时比较
totalCacheSize与上限值,超限则调用clearCaches。 - 配置建议放在 App 启动最早期:例如
AppDelegate中,与updateBaseUrl:等全局配置放在一起,这样后续每次冷启动的检查都能读到上限值。
| 上限设置 | 行为 |
|---|---|
0(默认) | 不自动清理,缓存持续增长 |
5~50(推荐区间) | 缓存接近上限时,启动即清理,空间可控 |
| 过大(如 500+) | 几乎等于不限制,失去意义 |
缓存开关与刷新缓存:让策略更灵活
配合缓存管理,还有两个常用配置可以精控缓存行为:
1. 开启/关闭 GET、POST 缓存(HYBNetworking/HYBNetworking.h第 111–120 行):
// GET、POST 都参与缓存(POST 默认不缓存) [HYBNetworking cacheGetRequest:YES shoulCachePost:YES];Demo 中的示例同样位于AFNetworkingDemo/ViewController.m第 51 行。
2. 每次请求时决定是否刷新缓存:GET/POST 接口都有refreshCache:参数:
NO:优先读本地缓存,命中则不发网络请求;YES:跳过缓存直接请求服务器,成功后用新数据覆盖缓存。
3. 无网时兜底(HYBNetworking/HYBNetworking.h第 102–109 行):
// 断网时自动从本地缓存读取数据 [HYBNetworking obtainDataFromLocalWhenNetworkUnconnected:YES];⚠️ 注意:只有 JSON 类型的数据缓存是官方明确支持的;PLIST、XML 等格式的缓存行为不确定,生产环境建议以 JSON 接口为主。
常见问题 FAQ
Q1:缓存文件存在哪里,可以手动查看吗?A:在应用沙盒Documents/HYBNetworkingCaches目录下,文件名是 URL 的 MD5 值。由于沙盒隔离,建议直接调用totalCacheSize查询大小。
Q2:为什么 POST 接口查不到缓存?A:HYBNetworking 默认不缓存 POST 请求,需要先调用cacheGetRequest:shoulCachePost:显式开启。
Q3:设置了自动清理上限,为什么感觉没生效?A:确认传入的值大于 0(0 表示不清理),并且配置在应用启动阶段完成。清理动作发生在启动时,不是缓存刚超限时实时触发。
Q4:手动清除缓存会影响下载的文件吗?A:不会。downloadWithUrl:saveToPath:的文件保存到你指定的路径,与clearCaches清理的接口数据缓存是两个独立体系。
小结:HYBNetworking 缓存管理 API 速查表
| 需求 | API | 声明位置 |
|---|---|---|
| 查询缓存大小(bytes) | + totalCacheSize | HYBNetworking/HYBNetworking.h第 129 行 |
| 手动清除全部缓存 | + clearCaches | HYBNetworking/HYBNetworking.h第 144 行 |
| 设置自动清理上限(MB) | + autoToClearCacheWithLimitedToSize: | HYBNetworking/HYBNetworking.h第 137 行 |
| 开启/关闭 GET/POST 缓存 | + cacheGetRequest:shoulCachePost: | HYBNetworking/HYBNetworking.h第 120 行 |
| 断网时读取本地缓存 | + obtainDataFromLocalWhenNetworkUnconnected: | HYBNetworking/HYBNetworking.h第 109 行 |
三个 API 分工明确:totalCacheSize负责"看得见",clearCaches负责"清得掉",autoToClearCacheWithLimitedToSize:负责"管得住"。把它们组合进你的设置页与启动流程,HYBNetworking 的缓存就会始终处于可控状态。项目完整 API 说明可继续查阅HYBNetworking/HYBNetworking.h,版本依赖(AFNetworking 3.1.0)见HYBNetworking.podspec。
【免费下载链接】HYBNetworking基于AFNetworking3.0以上版本封装的网络层。提供常用的GET/POST接口、上传下载图片、文件接口、支持缓存等。项目地址: https://gitcode.com/gh_mirrors/hy/HYBNetworking
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考