iOS数据持久化Plist使用

iOS 端数据持久化就是把数据保存在本地,常用于基本信息储存,应用配置,应用支持数据源,网络请求缓存等。主要有如下几种方式:

方式 介绍 特点
Plist文件 属性列表(Property List),通过xml的方式保存 本质为XML格式
Preference(NSUserDefaults) 偏好设置,通过key-value存取,一般用于基本用户信息储存 方便存取
Keychain 钥匙串,通过key-value保存在系统keychain中,常用于安全性高的数据存储,比如密码,账号等。 安全,不会随应用删除而丢失
NSKeyedArchiver 归档与解档,存储对象需要遵守NSCoding协议
SQLite3 小型数据库存储库,一般使用基于它封装的其他开源库 数据库储存
RMDB git最受欢迎基于sqlite的iOS开源库 数据库储存
WCDB 微信团队基于sqlite实现的ORM特性开源项目 数据库储存
CoreData 苹果官方基于sqlite封装的ORM库 数据库储存
Realm 一款流行的开源数据库,操作简单 跨平台,数据库储存

沙盒

iOS系统安全性高的原因之一是,应用都在沙盒之中运行,保证安全性。大部分本地化,可以选择数据存放路径,理解沙盒下目录的特点,能让我们选择最合适的目录。

文件 描述
应用程序包 包含应用所有资源和可执行文件
Documents iTunes会同步该目录
tmp iTunes不会同步,保存运行时的临时数据,且会删除
Library/Cache iTunes不会同步,一般存放体积大且不需要备份的不重要数据
Library/Preference iTunes不会同步,保存偏好设置和应用设置

获取沙盒根目录:

let homePath = NSHomeDirectory()

Plist文件

Plist文件适合配置项数据,比如应用配置,应用支持数据源(城市数据源)等基本数据类型可以满足的持久化

可视化创建Plist

比如项目中的info.plist文件就是一个可视化的plist,我们可以方便的可视化编辑和浏览。同样的,自己也可以创建。
在Xcode的目录下点击新建,选择iOS下的Resource 选择Property List,如下图:

在Plist文件中写入城市数据后:

读取Plist文件数据,读取路径之后,可以通过字典方式读取出来。

代码读写Plist文件

NSDictionary和NSArray支持直接读写Plist文件,但是使用Swift的标准的Dictionary和Array需要通过PropertyListSerilization做中转。
以下使用两种方式读写plist,基本数据如下:

 let dic: [String: Any] = ["name": "张三", "age": 20, "friends":["Tome", "Jack", "Rose"]]let nsPath = NSHomeDirectory() + "/Documents/nsUserInfo.plist"let swiftPath = NSHomeDirectory() + "/Documents/swiftUserInfo.plist"

使用NSDictionary/NSArray直接读写

如果在Swift中想直接读写,可以通过NSArray和NSDictionary中转

 private func writeToPlistByNSDic(){let nsDic = NSDictionary(dictionary: dic)   // Swift字典转为NS字典let result = nsDic.write(to: URL(fileURLWithPath: nsPath),atomically: true)}private func readPlistByNSDic() {let nsDic = NSDictionary(contentsOfFile: nsPath)  // 通过NS字典读,然后转为Swift字典print("读取到NSDic:\(nsDic)")if let temp = nsDic, let swiftDic = temp as? [String: Any] {print(swiftDic)}}

使用Swift原生方式读写Plist

如果使用Swift原生字典,需要通过PropertyListSerialization来序列化之后再读写。

private func writeToPlistBySwiftDic() {let data = try? PropertyListSerialization.data(fromPropertyList: dic, format: .xml, options: PropertyListSerialization.WriteOptions.max)  //先转换为datado {try data?.write(to: URL(fileURLWithPath: swiftPath))  // 写入} catch let error {print(error)}}private func readPlistBySwiftDic() {guard let plistData = FileManager.default.contents(atPath: swiftPath) else {  //读出dataprint("未读取到plist数据")return}let plist = try? PropertyListSerialization.propertyList(from: plistData, options: .mutableContainers, format: nil)  //再序列化为字典guard let plistDic = plist as? [String: Any] else {return}print("读取到SwiftDic:\(plistDic)")}

运行结果:

读取到NSDic:Optional({age = 20;friends =     (Tome,Jack,Rose);name = "\U5f20\U4e09";
})
["age": 20, "friends": <__NSArrayM 0x600003a47720>(
Tome,
Jack,
Rose
)
, "name": 张三]
读取到SwiftDic:["name": 张三, "friends": <__NSArrayM 0x6000008d4fc0>(
Tome,
Jack,
Rose
)
, "age": 20]

参考

How To Working With Plist In Swift Swift的Codable对象也支持读写到plist中(通过PropertyEncoder和PropertyDecoder)

【iOS数据持久化】Plist使用相关推荐

  1. iOS 数据持久化方式 - 归档 反归档

    所谓归档:将复杂对象转化为NSData类型数据(复杂-->归档-->NSData--->WriteToFile) 注意:归档是将对象转化为数据字节,以文件的形式存储在磁盘上, 所谓反 ...

  2. iOS数据持久化方案

    技术由来 数据持久化是iOS开发中必不可少的一项技能.因为开发中我们多会涉及到用户信息存储.文件存储.应用内容缓存中的一个或者几个场景. 数据持久化的几种方式 NSUserDefaults plist ...

  3. 【iOS数据持久化】偏好设置(UserDefaults)

    官网文档:NSUserDufaultClass Reference 关于偏好设置:AboutPreferences and Settings UserDefualts是一种便利的,通过key-valu ...

  4. 【iOS数据持久化】数据库(SQLite.swift)和FMDB

    数据持久化之SQLite数据库(SQLite.swift使用) 一.     简介 SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就足够了.它的处理速 ...

  5. iOS - 数据持久化之 FMDB 的使用

    前言 上一篇文章「iOS - 使用 SQLite 数据库实现数据持久化」,介绍了如何使用 sqlite3 操作 SQLite 数据库实现增删改查.但是在代码编写的过程中,我们发现 sqlite3 需要 ...

  6. iOS 数据持久化 -- Core Data (2)

    2019独角兽企业重金招聘Python工程师标准>>> 1.Core Data 是数据持久化存储的最佳方式 2.数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里, ...

  7. 【iOS数据持久化】归档解档(NSKeyedArchiver/ NSKeyedUnarchiver)

    简介 归档(Archive)也称为序列化(serialization),把对象转化为字节码,以文件的形式存储在磁盘上,只要遵循了NSCoding协议的对象都可以实现归档和解档(大部分foundatio ...

  8. iOS数据持久化--归档

    一.简介 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置信息 归档:因为 ...

  9. iOS 数据持久化-- FMDB

    一.简介 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象,省去了很多麻烦.冗余的C语言 ...

最新文章

  1. swift学习一:介绍,开发文档下载
  2. yolov3 权重转换
  3. ML之RF:kaggle比赛之利用泰坦尼克号数据集建立RF模型对每个人进行获救是否预测
  4. 服务容错设计:流量控制、服务熔断、服务降级
  5. Elasticsearch检索分类详解
  6. linux怎么抓sip包,Ubuntu下使用Wireshark进行抓包分析(含SIP和RTP包)
  7. python isinstance_Python之isinstance | 学步园
  8. IOS上路_04-简单示例-图片浏览器
  9. 程序员晒追女神聊天截图,坦言第一次没经验,网友直呼凭实力单身
  10. Linux c++ udp按包发送接收文件
  11. Redhat终端中文乱码解决
  12. Linux文件夹操作
  13. 共模电感适用的频率_共模电感使用特性及选材
  14. Windows下GetLastError()返回值介绍
  15. 帆软参数设置_报表工具FineReport新版本参数全攻略
  16. 命令与征服4java攻略_《命令与征服4》全关卡任务流程攻略
  17. 四则运算之结对作业报告
  18. 华为手机怎么恢复微信聊天记录(2022最新版)
  19. 未成年人勿进 谨以献给1980~1990出生的人(三)
  20. 安装allennlp

热门文章

  1. zabbix专题:第十二章 zabbix proxy分布式监控配置
  2. UIBubbleTableView
  3. C语言close函数
  4. ASP.NET编程中常用到的27个函数集
  5. Windwos Server 2016 远程桌面授权
  6. 内存存储器和外存储器的异同
  7. java 面试题汇总
  8. c语言获取linux的CPU、内存、IO、磁盘、网速(本机编译通过)
  9. git 常用操作总结
  10. TCP超时与重传机制与拥塞避免