iOS 的数据持久化是指将应用运行过程中产生的数据保存到设备的本地存储中,以便下次启动或在需要时读取。根据数据的结构复杂度、读写频率、安全性要求等不同场景,iOS 提供了多种持久化方案:
常见的数据持久化方式 1. NSUserDefaults / UserDefaults 
适用场景 :轻量级数据,如设置项、登录状态、首选项。存储类型 :基本类型(String、Bool、Int、Float、Double)、数组、字典、Data。存储位置 :Library/Preferences 目录下的 plist 文件。优点 :简单易用,自动持久化。缺点 :不适合存储大量或结构复杂的数据。 
1 2 UserDefaults .standard.set(true , forKey: "hasLaunchedBefore" )let  launched =  UserDefaults .standard.bool(forKey: "hasLaunchedBefore" )
2. Keychain 
适用场景 :存储敏感信息,如密码、token。安全性高 :系统级别的加密存储,支持 Touch ID / Face ID。缺点 :API 较复杂,可通过第三方库简化如 KeychainAccess、SAMKeychain。 
1 2 3 let  keychain =  Keychain (service: "com.example.app" )try?  keychain.set("secret-token" , key: "authToken" )let  token =  try?  keychain.get("authToken" )
3. File System 
适用场景 :音视频、图片、文本文件、自定义数据模型的二进制形式。常用 API :FileManager文件位置 :
Documents:用户生成内容,iCloud 会备份Caches:缓存数据,系统可能清理tmp:临时数据,随时会被删除 
 
1 2 let  fileURL =  FileManager .default.urls(for: .documentDirectory, in: .userDomainMask)[0 ].appendingPathComponent("myData.txt" )try?  "Hello" .write(to: fileURL, atomically: true , encoding: .utf8)
4. Core Data 
适用场景 :结构化复杂数据的本地数据库存储。优点 :
Apple 官方支持的对象图管理框架 
支持数据模型、关系型建模、查询优化、懒加载等 
可结合 iCloud 使用 
 
缺点 :学习曲线较陡,不适合简单数据 
1 2 3 let  entity =  NSEntityDescription .insertNewObject(forEntityName: "Person" , into: context)entity.setValue("Tom" , forKey: "name" ) try?  context.save()
5. SQLite 
适用场景 :对数据库结构完全控制;数据量大、结构清晰。优点 :灵活、高性能、广泛应用缺点 :原生 C 接口复杂,推荐使用封装库,如:
FMDB(Objective-C 封装)GRDB.swift(Swift 封装) 
 
6. Realm 
适用场景 :替代 Core Data 或 SQLite,简单易用、性能优。优点 :
不需要 schema migration 写 SQL 
跨平台 
响应式数据监听支持 
 
缺点 :是第三方库,需集成维护 
1 2 3 4 5 6 7 8 9 class  Dog : Object  {    @Persisted  var  name =  ""      @Persisted  var  age =  0  } let  dog =  Dog ()dog.name =  "Rex"  try!  realm.write {    realm.add(dog) } 
7. Codable + File System 
适用场景 :中等复杂的数据模型,自定义结构序列化为 JSON/Plist/Binary。优点 :轻量、灵活。配合方式 :
JSONEncoder/DecoderPropertyListEncoder/Decoder 
 
1 2 3 4 5 6 7 struct  User : Codable  {    let  name: String      let  age: Int  } let  user =  User (name: "Alice" , age: 25 )let  data =  try  JSONEncoder ().encode(user)try  data.write(to: fileURL)
总结对比 
方案 
优点 
缺点 
适用场景 
 
 
UserDefaults 
简单易用 
不适合复杂/大量数据 
配置、轻量状态 
 
Keychain 
高安全性 
API复杂 
密码、token 
 
File System 
灵活、支持任意数据 
手动管理读写/序列化 
文件、缓存、二进制资源 
 
Core Data 
强大对象关系管理 
学习成本高 
中大型结构化数据 
 
SQLite 
精细控制、高性能 
C语言繁琐 
数据库开发、性能敏感场景 
 
Realm 
简洁高效 
第三方库依赖 
快速开发结构化数据存储 
 
Codable + File 
灵活易于维护 
无查询机制 
自定义模型、轻量数据库替代品