一、轻量级键值存储
1. HarmonyOS
-
技术名称:首选项(
Preferences) -
特点:
- 基于内存缓存 + 异步持久化(类似 Android 的
SharedPreferences)。 - 单文件最大 16KB,适合高频小数据(如用户设置)。
- 数据隔离在应用沙箱内。
- 基于内存缓存 + 异步持久化(类似 Android 的
-
API 示例:
let prefs = await dataPreferences.getPreferences(context, 'myPrefs'); await prefs.put('key', 'value');
2. iOS
-
技术名称:
UserDefaults -
特点:
- 基于
plist文件存储键值对,支持基础数据类型。 - 无严格大小限制,但大文件性能差。
- 数据存储在应用沙箱的
Library/Preferences目录。
- 基于
-
API 示例:
UserDefaults.standard.set("value", forKey: "key") UserDefaults.standard.synchronize() // 立即写入(iOS 12+ 已废弃)
对比总结
| 特性 | HarmonyOS Preferences | iOS UserDefaults |
|---|---|---|
| 存储引擎 | 内存缓存 + 异步持久化 | plist 文件 |
| 性能 | 高频读写优化 | 小数据快,大数据慢 |
| 安全隔离 | 沙箱隔离 | 沙箱隔离 |
| 跨设备同步 | 需结合分布式数据服务(DDS) | 需结合 iCloud(NSUbiquitousKeyValueStore) |
二、文件存储
1. HarmonyOS
-
技术实现:
- 通过
@ohos.file.fsAPI 操作沙箱目录(filesDir、cacheDir等)。 - 支持读写文本、二进制文件,需申请权限访问公共目录(如媒体库)。
- 通过
-
场景:用户生成的大文件(图片、日志)。
-
代码示例:
let file = await fs.open(path, fs.OpenMode.READ_WRITE); await fs.write(file.fd, buffer);
2. iOS
-
技术实现:
- 使用
FileManager操作沙箱目录(Documents、Library/Caches)。 - 通过
UIDocument封装复杂文件操作(版本控制、冲突处理)。
- 使用
-
场景:用户文档、缓存文件。
-
代码示例:
let url = FileManager.default.urls(for: .documentDirectory, .userDomainMask).first! let data = "Hello".data(using: .utf8)! try data.write(to: url.appendingPathComponent("file.txt"))
对比总结
| 特性 | HarmonyOS 文件存储 | iOS 文件存储 |
|---|---|---|
| 目录管理 | 明确沙箱路径(filesDir) | FileManager 抽象路径 |
| 权限控制 | 动态申请访问公共目录权限 | 沙箱自动隔离,需权限访问相册等 |
| 加密支持 | 需手动集成 cryptoFramework | 支持 Data Protection(硬件加密) |
三、关系型数据库
1. HarmonyOS
-
技术名称:关系型数据库(RDB)
-
特点:
- 基于 SQLite,支持完整 SQL 语法。
- 提供
RdbPredicates链式查询构建器。
-
代码示例:
const predicates = new dataRDB.RdbPredicates('user'); predicates.equalTo('name', 'Alice'); let resultSet = await rdbStore.query(predicates);
2. iOS
-
技术名称:Core Data / SQLite.swift
-
特点:
Core Data是对象图管理框架,底层可选 SQLite、XML 等存储。- 直接使用 SQLite 需第三方库(如
SQLite.swift)。
-
代码示例(Core Data):
let request: NSFetchRequest<User> = User.fetchRequest() request.predicate = NSPredicate(format: "name == %@", "Alice") let users = try context.fetch(request)
对比总结
| 特性 | HarmonyOS RDB | iOS Core Data |
|---|---|---|
| ORM 支持 | 需手动封装 | 内置对象关系映射(ORM) |
| 查询语法 | 支持原生 SQL + 链式 API | 基于 NSPredicate |
| 跨设备同步 | 需结合分布式数据服务(DDS) | 需结合 CloudKit 或 iCloud |
四、敏感数据加密存储
1. HarmonyOS
-
技术名称:安全存储(Secure Storage)
-
特点:
- 基于 TEE(可信执行环境)硬件加密。
- 密钥由系统安全芯片管理,应用无法直接访问。
-
代码示例:
// 加密数据 let cipher = cryptoFramework.createCipher('AES256|GCM|PKCS7'); await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, key); let encryptedData = await cipher.doFinal(data);
2. iOS
-
技术名称:Keychain Services
-
特点:
- 基于 Secure Enclave 硬件加密。
- 存储密码、证书等敏感信息,支持跨应用共享(配置
accessGroup)。
-
代码示例:
let query: [String: Any] = [ kSecClass as String: kSecClassGenericPassword, kSecAttrAccount as String: "user", kSecValueData as String: "password".data(using: .utf8)! ] SecItemAdd(query as CFDictionary, nil)
对比总结
| 特性 | HarmonyOS 安全存储 | iOS Keychain |
|---|---|---|
| 加密级别 | TEE 硬件加密 | Secure Enclave 硬件加密 |
| 数据共享 | 仅限同一应用 | 支持跨应用(需配置权限) |
| 管理方式 | 系统托管密钥 | 应用定义访问控制策略 |
五、分布式数据同步
1. HarmonyOS
-
技术名称:分布式数据服务(DDS)
-
特点:
- 基于分布式软总线自动发现设备,支持跨设备数据同步。
- 提供冲突解决机制(如时间戳最新优先)。
-
代码示例:
let kvStore = await kvManager.getKVStore('storeId', { autoSync: true }); await kvStore.put('key', 'value'); // 自动同步到其他设备
2. iOS
-
技术实现:
- 使用
CloudKit或NSUbiquitousKeyValueStore实现 iCloud 同步。 - 需用户登录 iCloud 账户,依赖网络状态。
- 使用
-
代码示例(CloudKit):
let record = CKRecord(recordType: "User") record["name"] = "Alice" CKContainer.default().privateCloudDatabase.save(record) { _, _ in }
对比总结
| 特性 | HarmonyOS DDS | iOS iCloud 同步 |
|---|---|---|
| 同步机制 | 局域网直连 + 自动发现设备 | 依赖 iCloud 服务器中转 |
| 实时性 | 低延迟(局域网内) | 依赖网络延迟 |
| 开发复杂度 | 声明式 API,集成简单 | 需处理网络错误、冲突解决 |
六、总结
1. 核心差异
- 安全加密:HarmonyOS 依赖 TEE,iOS 依赖 Secure Enclave,两者均为硬件级安全。
- 跨设备同步:HarmonyOS 强调局域网直连,iOS 依赖云端(iCloud)。
- ORM 支持:iOS 的 Core Data 更成熟,HarmonyOS 需手动封装或使用 ORM 库。
2. 高频问题
-
“鸿蒙的分布式数据服务与 iCloud 有何本质区别?”
- 答:DDS 基于分布式软总线实现设备直连,适合低延迟局域网场景;iCloud 依赖云端,适合广域网但需网络连接。
-
“如何为 iOS 和鸿蒙设计一个跨平台加密存储方案?”
- 答:在鸿蒙使用
Secure Storage+cryptoFramework,在 iOS 使用Keychain+CryptoKit,通过抽象层统一接口。
- 答:在鸿蒙使用
-
“HarmonyOS 的 RDB 与 Core Data 的优劣对比?”
- 答:RDB 更接近原生 SQLite,适合复杂查询;Core Data 提供高级对象管理,但学习曲线陡峭。