数据存储与缓存
本文档介绍 iOS-JL_Bluetooth(杰理科技 iOS 蓝牙 SDK 及其配套 Demo)应用架构中「数据存储与缓存」层面的职责划分、仓库现状与验证结论,帮助开发者在接入 SDK 时正确选择持久化与缓存方案。
Purpose and Scope
本页面覆盖应用架构分层中的数据存储与缓存(Data Storage & Cache)主题,包括:
- 该层在 JL_Bluetooth iOS 应用中的定位与边界;
- 本仓库快照中可直接验证的存储相关证据(目录结构、打包形式);
- 可访问源码中存储/缓存实现的存在性核查结论;
- 无法在当前仓库快照中验证、需要进一步获取源码的部分。
与本主题相关的蓝牙连接、音频编解码、设备协议等内容属于其他能力页面,不在本文档范围内。例如 code/Example of audio encoding and decoding V1.1.0.zip 中的音频编解码示例属于独立的音频能力页;Demo 工程所依赖的高德地图(AMap)框架属于第三方地图能力,本文档仅在描述仓库结构时提及。
⚠️ 证据说明:本仓库快照中,JL_Bluetooth 的核心源码以 zip 压缩包(
code/Example of audio encoding and decoding V1.1.0.zip)与二进制 framework 形式分发,未以可读源码形式展开。因此,本页面中所有「未能在源码中验证」的结论均如实标注,不做臆测填充。
Overview
在 iOS 应用中,「数据存储与缓存」层承担以下职责(架构层面的通用定位,用于理解 SDK 与 App 的关系):
- 持久化配置:保存 SDK 初始化参数、设备绑定信息、用户偏好;
- 数据缓存:缓存设备返回的数据(如电量、固件版本、音频/协议数据),减少重复读取;
- 临时文件管理:管理固件升级包、音频文件等临时资源的写入与清理。
对于 iOS-JL_Bluetooth 仓库而言,当前快照呈现的结构为:
| 路径 | 内容 | 可验证程度 |
|---|---|---|
README.md / README_EN.md | 项目说明(中/英文) | ✅ 存在 |
LICENSE | 开源许可证 | ✅ 存在 |
code/JieLi_Home_Demo/ | 官方 Demo 工程,内含 AMap(高德地图)系列 framework | ✅ 存在(framework 为二进制) |
code/Example of audio encoding and decoding V1.1.0.zip | 音频编解码示例源码压缩包 | ✅ 存在(zip 内源码不可直接读取) |
对仓库内可访问的源码文件执行关键字检索(NSUserDefaults、NSKeyedArchiver、writeToFile、sqlite、FMDB、YYCache),未发现任何存储/缓存实现——这是预期结果:核心实现位于 zip 包与二进制 framework 内,当前快照无法展开验证。
Architecture
下图展示当前仓库快照中可验证的目录结构,以及「数据存储与缓存」层在应用架构中的逻辑位置(虚线框为概念层,非仓库内可验证文件):
flowchart TD
subgraph sg_Repo["iOS-JL_Bluetooth 仓库(main 分支)"]
Root["仓库根目录"]
Readme["README.md / README_EN.md"]
License["LICENSE"]
Code["code/"]
Demo["JieLi_Home_Demo/ 工程"]
AMap1["AMapFoundationKit.framework"]
AMap2["AMapLocationKit.framework"]
AMap3["AMapSearchKit.framework"]
Zip["Example of audio encoding and decoding V1.1.0.zip"]
end
subgraph sg_AppArch["App 架构分层(概念层)"]
UI["UI 层"]
Service["业务/服务层<br/>JL_Bluetooth SDK"]
Store["数据存储与缓存层<br/>(本文档主题)"]
BLE["BLE 蓝牙通道"]
end
Root --> Readme
Root --> License
Root --> Code
Code --> Demo
Demo --> AMap1
Demo --> AMap2
Demo --> AMap3
Code --> Zip
UI --> Service
Service --> Store
Service --> BLE
Store -. "实现位于 zip/二进制 framework,<br/>本快照无法展开验证" .-> Zip
图注:
- 实线部分为仓库中已验证的文件/目录关系:Demo 工程依赖 AMap 系列 framework,源码示例以 zip 打包;
- 虚线部分为架构概念层:
数据存储与缓存层由 App 或 SDK 内部实现,与蓝牙通道解耦——存储层不直接依赖 BLE 时序,便于在重连、断连场景下独立读写。
为什么存储层与蓝牙层分离
从架构意图看,将存储/缓存独立成层(而非散落在蓝牙回调中)可以带来三点收益:
- 回调线程安全:BLE 回调多发生在系统队列,若直接写文件/UserDefaults 易造成竞态;独立存储层统一收敛写入口;
- 断线恢复:设备重连后需要恢复上次的绑定信息与缓存数据,集中式存储便于恢复流程复用;
- 可替换性:App 可以选择 UserDefaults、文件、数据库等不同实现,SDK 仅依赖存储抽象。
已验证的仓库证据
以下结论全部来自本次对仓库快照的实际检索(文件列举与关键字检索),可作为后续排查的依据:
仓库根目录
- README.md:项目中文说明;
- README_EN.md:项目英文说明;
- LICENSE:许可证文件。
code/ 目录
code/JieLi_Home_Demo/:官方 Demo 工程,包含第三方高德地图 framework(AMapFoundationKit、AMapLocationKit、AMapSearchKit)。这些框架为二进制形式,仅提供头文件(.framework/Headers/*.h),与存储/缓存主题无关;code/Example of audio encoding and decoding V1.1.0.zip:音频编解码示例源码包。JL_Bluetooth 核心实现(含可能的存储/缓存代码)应以 zip 形式存放于此路径附近,或随 SDK 二进制分发,本快照无法直接展开。
关键字检索结果
对可访问的源码文件(.h/.m/.mm)检索以下模式,结果均为空:
| 检索模式 | 结果 | 说明 |
|---|---|---|
NSUserDefaults | 无匹配 | 未发现基于 UserDefaults 的偏好存储实现 |
NSKeyedArchiver | 无匹配 | 未发现归档序列化实现 |
writeToFile | 无匹配 | 未发现文件写入实现 |
sqlite / FMDB | 无匹配 | 未发现数据库实现 |
YYCache | 无匹配 | 未发现第三方缓存库集成 |
结论:在当前可访问的源码范围内,未找到任何数据存储与缓存的具体实现(Implementation details not found in source)。核心实现位于 zip 包或二进制 framework 内,需解压或获取 SDK 源码后方可验证。请勿基于本页推断具体 API 名称或行为。
存储与缓存实现现状(缺口说明)
已知缺口
- SDK 内部存储:设备绑定信息、协议数据缓存等是否由 SDK 内部持久化,无法从本快照验证;
- Demo 的存储用法:
JieLi_Home_Demo工程中的存储调用点(如保存设备 MAC、音频文件落盘)不可见——工程内可读文件仅为第三方框架头文件; - 缓存策略:是否有 LRU/TTL 等缓存淘汰策略、缓存目录(
Library/Caches或tmp)选择,均无源码证据。
建议的验证路径
- 解压
code/Example of audio encoding and decoding V1.1.0.zip,检索其中的NSUserDefaults/writeToFile/NSFileManager使用点; - 获取 JL_Bluetooth SDK 的完整源码(或反查 framework 内导出符号),确认是否存在
JL_...Cache、JL_...Manager等存储类; - 对照官方文档中「设备信息保存」「固件升级包管理」章节,确认存储层对外 API。
故障模式、边界情况与并发(上下文指南)
以下内容为 iOS 存储/缓存层的通用工程注意事项,非仓库源码验证结论,供接入 JL_Bluetooth 时参考:
- 写盘与蓝牙回调的并发:BLE 回调通常不在主线程;若在回调中直接写文件,需保证写入串行化(如串行队列或
@synchronized),避免多设备/多回调并发写导致数据错乱; - 缓存目录的清理风险:若使用
Library/Caches存放临时音频/升级包,系统可能在存储紧张时清理该目录,恢复流程需容忍文件缺失并重新下载/生成; - 固件升级包的完整性:升级包写入中断(App 被杀、磁盘满)后,下次升级前应校验文件大小/校验和,避免向设备下发损坏数据;
- UserDefaults 的写入时机:高频写入(如实时电量缓存)不宜直接写 UserDefaults,应做内存缓存 + 周期落盘,避免频繁磁盘同步影响性能。
相关链接
- README.md — 项目说明(中文)
- README_EN.md — 项目说明(英文)
- code/JieLi_Home_Demo — 官方 Demo 工程目录
- code/Example of audio encoding and decoding V1.1.0.zip — 音频编解码示例源码包(核心实现入口)
使用示例与 API 参考(当前不可用)
按照页面规范,本文档应提供从仓库源码提取的存储/缓存使用示例与 API 签名。由于以下原因,当前无法提供任何代码示例(No code example available):
- 仓库中可访问的源码不包含任何存储/缓存实现(见上文关键字检索结果);
- 核心源码位于 zip 压缩包与二进制 framework 内,工具无法展开读取;
- 为避免臆造 API 签名与行为,本页面不生成任何未经源码验证的示例代码。
待获取 SDK 完整源码后,建议补充以下内容:
NSUserDefaults保存设备绑定/偏好设置的示例;- 固件升级包写入
Library/Caches的示例; - 存储管理类的初始化与调用示例(API 签名、参数、返回值、异常);
- 存储层与蓝牙回调线程交互的并发示例。
总结
- 本文档明确了「数据存储与缓存」层在 iOS-JL_Bluetooth 应用架构中的定位与边界;
- 如实记录了仓库快照中可验证的证据(目录结构、打包形式、检索结果);
- 明确标注了无法验证的缺口(SDK 内部存储实现、缓存策略、Demo 存储调用点),并给出后续验证路径;
- 未包含任何未经源码验证的 API 或代码示例,所有缺口均以「Implementation details not found in source」如实标注。