iOS 应用数据存储的核心机制是沙盒(Sandbox),每个应用拥有独立的存储空间,确保数据隔离与安全。以下是 iOS 应用数据存储的详细机制和常见方法:
一、沙盒目录结构
每个应用的沙盒包含以下关键目录:
Documents
- 用途:存储用户生成的数据(如文档、配置文件)。
- 特点:iCloud 自动备份,适合需要持久化的重要数据。
- 路径:
FileManager.default.urls(for: .documentDirectory, ...)
Library/
- Caches:缓存文件(如图片、临时数据),可被系统清理,iCloud 不备份。
- Preferences:通过
UserDefaults
存储的键值对数据(自动保存为.plist
文件)。 - Application Support:持久化支持文件(如数据库、资源包),需手动创建。
tmp/
- 用途:临时文件,应用退出后可能被删除。
- 特点:系统不定期清理,不备份。
AppName.app/
- 用途:应用二进制文件与静态资源(如图片、代码)。
- 特点:只读,签名验证,不可修改。
二、数据存储方式
UserDefaults
- 适用场景:小型键值数据(如用户设置)。
- 限制:单文件存储,不适合大量数据。
- 示例:
UserDefaults.standard.set(true, forKey: "isDarkMode")
文件存储(File System)
- 直接读写文件到沙盒目录(如保存文本、图片到
Documents
)。 - API:
FileManager
、Data.write(to:)
。
Core Data
- 用途:对象关系管理(ORM),支持复杂数据模型与查询。
- 特点:自动处理数据版本迁移,可与 iCloud 同步。
SQLite
- 轻量级数据库,适合结构化数据存储,需手动管理连接(如通过
FMDB
库)。
Keychain
- 用途:安全存储敏感信息(如密码、令牌)。
- 特点:系统级加密,数据跨应用卸载保留。
- API:
Security.framework
或第三方库(如KeychainAccess
)。
NSCache
- 内存缓存临时数据,系统内存不足时自动清理。
三、高级场景
iCloud 同步
- 通过
NSUbiquitousContainer
同步数据到 iCloud(需配置 entitlements)。 - 适用:
Core Data
或文件存储(如保存到Documents
的特定文件)。
App Groups
- 同一开发者的多个应用共享数据。
- 路径:
FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.example")
数据保护(Data Protection)
- 使用
NSFileProtectionComplete
等选项加密文件,依赖设备锁屏状态。
四、数据安全与清理
- 备份规则:
Documents
和Library/Application Support
默认备份到 iCloud,可通过.nosync
后缀或NSURLIsExcludedFromBackupKey
排除。 - 卸载行为:应用删除时,沙盒内所有数据(除 Keychain)均被清除。
五、选择存储方式的建议
- 小数据/配置 →
UserDefaults
- 敏感信息 →
Keychain
- 结构化数据 →
Core Data
或SQLite
- 大文件/媒体 →
Documents
或Library/Caches
(按持久性需求) - 跨设备同步 → iCloud +
Core Data
通过合理利用沙盒机制和存储方案,开发者能在安全性与功能性之间取得平衡,同时遵循 iOS 平台的最佳实践。