LESSON 23 / 575 分钟
UserDefaults、文件与 Keychain
选择存储方式时,先判断数据是否敏感、是否结构化、是否需要查询。
用你的前端经验理解
UserDefaults 类似简单偏好存储;文件像本地文档;Keychain 是系统安全存储,不能把它等同 localStorage。
01 / 理解问题
为什么需要它
存储选型先问数据的职责:偏好设置、业务记录、大文件与敏感凭证有不同要求。把所有内容 JSON.stringify 后塞进 localStorage 的习惯不宜直接迁移。原生应用还要考虑沙盒目录、备份、缓存清理、读写失败和版本升级,尤其不能把“现在能写入”当作长期数据安全。
它是怎样工作的
UserDefaults 适合少量偏好,不是关系数据库;文件适合文档、导出和媒体;SwiftData 或 Core Data 适合需要查询与关系的业务模型;Keychain 管理小型敏感凭证。缓存可以被系统清理,不能作为用户唯一数据。写文件时需要处理编码、目标目录和错误,重要替换可使用原子写入以减少半写文件风险。
02 / 掌握要点
把关键概念连起来
1
偏好
UserDefaults / @AppStorage 适合主题、排序等少量设置,避免放大数据与认证密钥。
2
文件
FileManager 与文件 API 适合文档、导出和图片;区分 Documents、Application Support、Caches,缓存可能被清理。
3
敏感信息
Keychain 适合令牌等凭证,结合可访问性策略。退出登录时按产品需要删除相关凭证。
03 / 案例推演
为阅读 App 分配存储位置
- 字体大小与排序偏好放偏好存储,文章与阅读状态放业务仓库,封面缩略图放可重建缓存。
- 用户主动导出的文档通过合适的文件交互交付;不要假设沙盒路径就是用户能在文件管理器随意访问的位置。
- refresh token 使用 Keychain,退出时按账号精确清理;磁盘写失败时保留草稿并提示,不展示虚假成功。
这里需要你亲自判断
“保存在沙盒内”不等于“适合存敏感数据”;磁盘写入失败也需要处理。
04 / 动手验证
做一个小练习
给主题设置、图片缓存、登录 token 各选一种存储方式并解释。
- 制作“数据、存储位置、丢失后能否重建”三列表,覆盖上述五类数据。
- 删除缓存后重启 App,确认业务记录仍在且封面可重新生成或下载。
展开参考思路与验收标准
缓存丢失只能影响速度,不应丢失用户创作。偏好与记录升级时需要默认值或迁移策略;敏感字段不应混入普通日志、导出文件或调试备份。
05 / 检查理解
登录 token 更适合存在哪里?
答对理解题后即可标记完成