当前位置: 首页 > news >正文

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),仅供参考

http://www.cnnetsun.cn/news/4268829.html

相关文章:

  • Superpowers 持续集成与自动化测试指南:从最小 CI 到部署验收检查清单
  • 用 Hermes Agent 三步做出数据分析报告:从 CSV 到图表的完整教程
  • STM32 UI框架升级解析:TouchGFX与LVGL选型及性能优化
  • 堵住低效漏洞!2026好用的AI论文网站大盘点,高分初稿不用愁
  • 数据分析样本与指标的准备
  • Plyvel源码剖析:Cython与nogil如何让Python以C速度调用LevelDB C++ API
  • 防爆AGV复合机器人:化工仓储搬运方案
  • 深入解析容器安全工具udica:为什么CIL块继承是策略生成的灵魂
  • MATLAB入门指南:从基础操作到工程实践的核心技巧
  • 跨模型KV Cache复用:闭式线性映射能否省掉重复Prefill?
  • Hermes Agent 接入 OpenRouter 完整指南:3 步配好 200+ AI 模型
  • 四步打通系统设计面试:system-design-primer完整实战指南
  • Superpowers AI编程技能库实战教程:从安装到跑通完整开发流程
  • C++模板编程:从泛型思想到STL实现的核心技术解析
  • Czar.Cms配置文件与AutoFac依赖注入实战:如何构建自动扫描整个程序集的DI容器
  • TOPSIS综合评价法:从原理到Python实战,告别“拍脑袋”决策
  • 深入解析西门子V90伺服GSD文件:从PROFINET集成到外部DI控制实战
  • Token成本失控?企业AI成本治理实战:从计费原理到限额监控
  • PPBadgeView 使用教程
  • Oura 智能戒指睡眠追踪功能遭起诉,准确性受质疑!
  • 【Docker】完美解决拉取镜像超时报错:ERROR: Get https://registry-1.docker.io/v2/
  • Solidity实战:构建多资产代币化链上基金
  • 智驾安卓时刻:开源模型如何从能跑到能用
  • 高薪与闭源之外:从Claude API看开发者如何构建可迁移的AI技术栈
  • 高精度地图核心技术:众源更新、质量评估、编译发布与动态图层详解
  • Anthropic闭源争议下Claude API接入实战与开源模型替代方案
  • YOLO共享单车检测数据集:VOC格式工业级实战指南
  • 智能房车技术架构:从能源调度到离线自治的关键工程
  • 拓扑排序与动态规划:从食物链计数到DAG路径统计的算法精解
  • VLM驱动的搜索相关性度量:从文本匹配到跨模态理解