【iOS】—— 持久化
发布人:shili8
发布时间:2025-03-14 11:33
阅读次数:0
**持久化在 iOS 中**
在 iOS 应用开发中,持久化是指将数据存储在设备上,以便在应用程序关闭或重启时仍然存在。这种技术对于保存用户的设置、历史记录、缓存等信息至关重要。
###1. NSUserDefaults`NSUserDefaults` 是一个简单的键值对存储系统,允许您以 plist 文件形式存储和读取数据。
**示例代码**
swift// 存储数据let defaults = UserDefaults.standarddefaults.set("Hello, World!", forKey: "greeting") defaults.synchronize() //读取数据if let greeting = defaults.string(forKey: "greeting") { print(greeting) // 输出: Hello, World! }
**注意**
`NSUserDefaults` 不适合存储大型数据,因为它会将所有键值对写入一个 plist 文件。
###2. Core DataCore Data 是苹果提供的持久化框架,允许您创建和管理复杂的数据模型。它支持关系数据库、缓存等功能。
**示例代码**
swift// 创建一个新的 Core Data 存储let storeDescription = NSPersistentStoreDescription() storeDescription.typeName = "CoreDataModel" storeDescription.url = URL(fileURLWithPath: "/path/to/store") // 获取一个 Core Data 上下文let context = NSManagedObjectContext(concurrencyType: .main) context.persistentStoreCoordinator = NSPersistentStoreCoordinator(storeDescription: storeDescription) // 创建一个新的实体let entity = NSEntityDescription() entity.name = "Person" entity.managedObjectContext = context// 添加数据let person = Person(entity: entity, insertInto: context) person.name = "John Doe" //保存数据try! context.save() //读取数据if let persons = try? context.fetch(NSFetchRequest.init()) { for person in persons { print(person.value(forKey: "name") as? String) // 输出: John Doe } }
**注意**
Core Data 需要在项目中添加 Core Data Framework。
###3. SQLiteSQLite 是一个轻量级的关系数据库,支持 SQL 查询语言。您可以使用 `FMDB` 或 `SQLite.swift` 等第三方库来操作 SQLite 数据库。
**示例代码**
swift// 使用 FMDB 创建一个新的 SQLite 数据库let db = FMDatabase(path: "/path/to/database") // 创建一个新表db?.executeUpdate("CREATE TABLE IF NOT EXISTS persons (id INTEGER PRIMARY KEY, name TEXT)", withArgumentsInArray: nil) // 添加数据db?.executeUpdate("INSERT INTO persons (name) VALUES (?)", withArgumentsInArray: ["John Doe"]) //读取数据let results = db?.executeQuery("SELECT * FROM persons") while let row = results?.next() { print(row[0] as? String, row[1] as? String) // 输出: John Doe}
**注意**
SQLite 需要在项目中添加 FMDB 或 SQLite.swift 等第三方库。
###4. RealmRealm 是一个轻量级的持久化框架,支持关系数据库、缓存等功能。它提供了一个简单的 API 来操作数据。
**示例代码**
swift// 创建一个新的 Realm 数据库let realm = try! Realm() // 添加数据let person = Person() person.name = "John Doe" try! realm.write { realm.add(person) } //读取数据if let persons = realm.objects(Person.self) { for person in persons { print(person.value(forKey: "name") as? String) // 输出: John Doe } }
**注意**
Realm 需要在项目中添加 Realm Framework。
### 总结iOS 中有多种持久化技术可供选择,包括 NSUserDefaults、Core Data、SQLite 和 Realm 等。每种技术都有其特点和使用场景。通过了解这些技术的优缺点,您可以选择最适合您的应用需求的持久化方案。
**参考**
* [Apple Developer: Core Data]( />* [FMDB: A SQLite Database Framework for iOS and macOS]( />* [SQLite.swift: A SQLite Database Framework for Swift](