news 2026/8/28 15:22:00

HYBNetworking缓存管理实战:查询缓存大小、手动清除与自动清理策略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HYBNetworking缓存管理实战:查询缓存大小、手动清除与自动清理策略

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):

  1. 统一缓存目录:所有缓存文件都存放在沙盒的Documents/HYBNetworkingCaches目录下(见cachePath()HYBNetworking/HYBNetworking.m第 113–115 行)。
  2. URL 的 MD5 作为缓存键:请求成功的数据会转成 JSON,以"完整 URL + 参数"的 MD5 值命名存储文件;下次同样请求可直接命中磁盘缓存。
  3. 默认只缓存 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)+ totalCacheSizeHYBNetworking/HYBNetworking.h第 129 行
手动清除全部缓存+ clearCachesHYBNetworking/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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/28 15:17:13

用 Hermes Agent 三步做出数据分析报告:从 CSV 到图表的完整教程

用 Hermes Agent 三步做出数据分析报告:从 CSV 到图表的完整教程 【免费下载链接】hermes-agent The agent that grows with you 项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent Hermes Agent 是一个能执行任务的 AI 代理框架,它…

作者头像 李华
网站建设 2026/8/28 15:14:47

STM32 UI框架升级解析:TouchGFX与LVGL选型及性能优化

1. 为什么这次UI框架的升级让我这个老嵌入式开发坐不住了 做了这么多年STM32开发,说实话,以前一提到“给单片机做界面”,很多人的第一反应还是点几个LED、驱动个OLED屏显示字符,最多加个简单的菜单循环。但这两年,随着…

作者头像 李华
网站建设 2026/8/28 15:12:15

堵住低效漏洞!2026好用的AI论文网站大盘点,高分初稿不用愁

写论文的难题与AI辅助解决方案 在撰写期刊论文、毕业论文或职称论文时,许多同学都会遇到不少难题。人工写论文的时候,面对成千上万的参考文献,想找到合适的资料,简直像大海捞针一样费劲。再加上各种复杂且严格的格式要求&#xf…

作者头像 李华
网站建设 2026/8/28 15:11:29

数据分析样本与指标的准备

数据分析样本与指标的准备基准测试先固定问题,再记录数字。在“AI 增强型 Python 数据分析全家桶实战案例:智能检索、知识增强与上下文编排”里,先把对象落到 检索结果、上下文拼装、工具调用和结果引用,再决定工具和实现。本文只…

作者头像 李华
网站建设 2026/8/28 15:09:47

Plyvel源码剖析:Cython与nogil如何让Python以C速度调用LevelDB C++ API

Plyvel源码剖析:Cython与nogil如何让Python以C速度调用LevelDB C API 【免费下载链接】plyvel Plyvel, a fast and feature-rich Python interface to LevelDB 项目地址: https://gitcode.com/gh_mirrors/pl/plyvel Plyvel 是一个快速且功能丰富的 Python 接…

作者头像 李华