UserDefaults
优点
简单易用
提供简单的键值对存储接口
无需复杂配置,开箱即用
适合存储少量简单数据
轻量级
专门为存储小量数据设计
内存占用小
性能开销低
自动持久化
数据自动保存到磁盘
应用重启后数据仍然可用
通过
synchronize()
方法可以强制立即写入(iOS 12+已自动处理)
线程安全
可以在多线程环境中安全使用
内部实现了线程同步机制
支持多种数据类型
基本类型:String, Int, Float, Double, Bool
复杂类型:Data, Array, Dictionary, URL
自定义对象(需编码为Data)
缺点
不适合大量数据
性能随数据量增加而下降
官方建议存储数据不超过几百KB
大数据量会导致启动变慢
无加密保护
数据以明文形式存储在plist文件中
不适合存储敏感信息(如密码、令牌等)
无版本控制
数据结构变更时难以迁移
需要自行处理数据兼容性问题
共享限制
默认只能被当前应用访问
如需应用间共享需使用App Groups
数据类型限制
不能直接存储自定义对象
复杂对象需要先编码为Data
不支持关系型数据
无查询功能
只能通过键名直接访问
不支持条件查询或排序
适用场景
✅ 适合:
用户偏好设置
简单的应用配置
小量非敏感数据缓存
标记位/开关状态存储
❌ 不适合:
大量结构化数据
敏感信息存储
需要复杂查询的数据
频繁更新的数据
// 存储数据
UserDefaults.standard.set("value", forKey: "key")
UserDefaults.standard.set(123, forKey: "numberKey")
UserDefaults.standard.synchronize() // 立即同步(可选)// 读取数据
let value = UserDefaults.standard.string(forKey: "key")
let number = UserDefaults.standard.integer(forKey: "numberKey")// 删除数据
UserDefaults.standard.removeObject(forKey: "key")