- 作者:老汪软件技巧
- 发表时间:2024-09-29 04:00
- 浏览量:
一、用户首选项简介
在iOS开发中有一个名为UserDefaults的类专门管理存储和读取轻量型数据的时候使用,有些时候也称之为用户偏好设置。而今天这里我们所说的HarmonyOS中的Preferences(也称之为用户首选项)其实与iOS的UserDefaults的作用几乎是一样的。为了方便记忆这里对两者进行了总结,具体总结如下:
特性iOS系统的 UserDefaultsHarmonyOS系统的Preferences
存储机制
以键值对形式存储数据,支持多种数据类型(布尔值、整数、浮点数、字符串、数组、字典等)。数据存储在设备上的 plist 文件中。
以键值对形式存储数据,支持多种数据类型(布尔值、整数、浮点数、字符串等)。数据存储在设备上的 XML 文件中。
易用性
提供了简洁的 API,易于使用。
提供了简洁的 API,易于使用。
轻量级
适用于存储少量数据,不适合存储大量数据或频繁更新的数据。
适用于存储少量数据,不适合存储大量数据或频繁更新的数据。建议存储的数据不超过一万条。
持久化
数据会持久化到设备上,即使应用被关闭或重启,数据仍然保留。
数据会持久化到设备上,即使应用被关闭或重启,数据仍然保留。
性能
读写速度快,但大量数据或频繁更新可能影响性能。
读写速度快,但大量数据或频繁更新可能影响性能。
安全性
不适合存储敏感信息,如密码或个人身份信息。建议使用 Keychain 服务。
不适合存储敏感信息,如密码或个人身份信息。建议使用其他安全存储机制。
同步性
在主线程上访问是线程安全的。
在主线程上访问是线程安全的。
使用场景
适用于存储用户的偏好设置、应用状态等轻量级数据。
适用于存储用户的偏好设置、应用状态等轻量级数据,如屏幕亮度、夜间模式等。
API 示例
swift
let defaults = UserDefaults.standard
defaults.set(true, forKey: "isDarkModeEnabled")
java
Preferences preferences = Preferences.getInstance();
preferences.putBoolean("isDarkModeEnabled", true);
读取数据
swift
let defaults = UserDefaults.standard
let isDarkModeEnabled = defaults.bool(forKey: "isDarkModeEnabled")
java
Preferences preferences = Preferences.getInstance();
boolean isDarkModeEnabled = preferences.getBoolean("isDarkModeEnabled", false);
数据量限制
没有明确的数据量限制,但建议不要存储大量数据。
建议存储的数据不超过一万条,避免过大的内存开销。
开发语言支持
主要支持 Swift 和 Objective-C。
支持 Java 和 C++,近期新增了 JS/TypeScript 接口。
总结
希望这个表格能帮助你更好地理解和对比 iOS 的 UserDefaults 和鸿蒙的 Preferences。
二、约束限制
三、 接口说明
以下是用户首选项持久化功能的相关接口,更多接口及使用方式请见用户首选项。
接口名称描述
getPreferencesSync(context: Context, options: Options): Preferences
获取Preferences实例。该接口存在异步接口。
putSync(key: string, value: ValueType): void
将数据写入Preferences实例,可通过flush将Preferences实例持久化。该接口存在异步接口。
hasSync(key: string): boolean
检查Preferences实例是否包含名为给定Key的存储键值对。给定的Key值不能为空。该接口存在异步接口。
getSync(key: string, defValue: ValueType): ValueType
获取键对应的值,如果值为null或者非默认值类型,返回默认数据defValue。该接口存在异步接口。
deleteSync(key: string): void
从Preferences实例中删除名为给定Key的存储键值对。该接口存在异步接口。
flush(callback: AsyncCallback): void
将当前Preferences实例的数据异步存储到用户首选项持久化文件中。
on(type: 'change', callback: Callback): void
订阅数据变更,订阅的数据发生变更后,在执行flush方法后,触发callback回调。
off(type: 'change', callback?: Callback): void