LESSON 23 / 575 分钟

UserDefaults、文件与 Keychain

选择存储方式时,先判断数据是否敏感、是否结构化、是否需要查询。

用你的前端经验理解

UserDefaults 类似简单偏好存储;文件像本地文档;Keychain 是系统安全存储,不能把它等同 localStorage。

为什么需要它

存储选型先问数据的职责:偏好设置、业务记录、大文件与敏感凭证有不同要求。把所有内容 JSON.stringify 后塞进 localStorage 的习惯不宜直接迁移。原生应用还要考虑沙盒目录、备份、缓存清理、读写失败和版本升级,尤其不能把“现在能写入”当作长期数据安全。

它是怎样工作的

UserDefaults 适合少量偏好,不是关系数据库;文件适合文档、导出和媒体;SwiftData 或 Core Data 适合需要查询与关系的业务模型;Keychain 管理小型敏感凭证。缓存可以被系统清理,不能作为用户唯一数据。写文件时需要处理编码、目标目录和错误,重要替换可使用原子写入以减少半写文件风险。

把关键概念连起来

1

偏好

UserDefaults / @AppStorage 适合主题、排序等少量设置,避免放大数据与认证密钥。

2

文件

FileManager 与文件 API 适合文档、导出和图片;区分 Documents、Application Support、Caches,缓存可能被清理。

3

敏感信息

Keychain 适合令牌等凭证,结合可访问性策略。退出登录时按产品需要删除相关凭证。

为阅读 App 分配存储位置

  1. 字体大小与排序偏好放偏好存储,文章与阅读状态放业务仓库,封面缩略图放可重建缓存。
  2. 用户主动导出的文档通过合适的文件交互交付;不要假设沙盒路径就是用户能在文件管理器随意访问的位置。
  3. refresh token 使用 Keychain,退出时按账号精确清理;磁盘写失败时保留草稿并提示,不展示虚假成功。

这里需要你亲自判断

“保存在沙盒内”不等于“适合存敏感数据”;磁盘写入失败也需要处理。

做一个小练习

给主题设置、图片缓存、登录 token 各选一种存储方式并解释。

  1. 制作“数据、存储位置、丢失后能否重建”三列表,覆盖上述五类数据。
  2. 删除缓存后重启 App,确认业务记录仍在且封面可重新生成或下载。
展开参考思路与验收标准

缓存丢失只能影响速度,不应丢失用户创作。偏好与记录升级时需要默认值或迁移策略;敏感字段不应混入普通日志、导出文件或调试备份。

登录 token 更适合存在哪里?

继续查阅官方资料
Apple Developer 官方资料

本课聚焦核心认知。具体 API、系统要求与发布政策,以当前官方文档和工程验证为准。

答对理解题后即可标记完成