【iOS数据持久化】Plist使用
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使用相关推荐
- iOS 数据持久化方式 - 归档 反归档
所谓归档:将复杂对象转化为NSData类型数据(复杂-->归档-->NSData--->WriteToFile) 注意:归档是将对象转化为数据字节,以文件的形式存储在磁盘上, 所谓反 ...
- iOS数据持久化方案
技术由来 数据持久化是iOS开发中必不可少的一项技能.因为开发中我们多会涉及到用户信息存储.文件存储.应用内容缓存中的一个或者几个场景. 数据持久化的几种方式 NSUserDefaults plist ...
- 【iOS数据持久化】偏好设置(UserDefaults)
官网文档:NSUserDufaultClass Reference 关于偏好设置:AboutPreferences and Settings UserDefualts是一种便利的,通过key-valu ...
- 【iOS数据持久化】数据库(SQLite.swift)和FMDB
数据持久化之SQLite数据库(SQLite.swift使用) 一. 简介 SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就足够了.它的处理速 ...
- iOS - 数据持久化之 FMDB 的使用
前言 上一篇文章「iOS - 使用 SQLite 数据库实现数据持久化」,介绍了如何使用 sqlite3 操作 SQLite 数据库实现增删改查.但是在代码编写的过程中,我们发现 sqlite3 需要 ...
- iOS 数据持久化 -- Core Data (2)
2019独角兽企业重金招聘Python工程师标准>>> 1.Core Data 是数据持久化存储的最佳方式 2.数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里, ...
- 【iOS数据持久化】归档解档(NSKeyedArchiver/ NSKeyedUnarchiver)
简介 归档(Archive)也称为序列化(serialization),把对象转化为字节码,以文件的形式存储在磁盘上,只要遵循了NSCoding协议的对象都可以实现归档和解档(大部分foundatio ...
- iOS数据持久化--归档
一.简介 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置信息 归档:因为 ...
- iOS 数据持久化-- FMDB
一.简介 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象,省去了很多麻烦.冗余的C语言 ...
最新文章
- swift学习一:介绍,开发文档下载
- yolov3 权重转换
- ML之RF:kaggle比赛之利用泰坦尼克号数据集建立RF模型对每个人进行获救是否预测
- 服务容错设计:流量控制、服务熔断、服务降级
- Elasticsearch检索分类详解
- linux怎么抓sip包,Ubuntu下使用Wireshark进行抓包分析(含SIP和RTP包)
- python isinstance_Python之isinstance | 学步园
- IOS上路_04-简单示例-图片浏览器
- 程序员晒追女神聊天截图,坦言第一次没经验,网友直呼凭实力单身
- Linux c++ udp按包发送接收文件
- Redhat终端中文乱码解决
- Linux文件夹操作
- 共模电感适用的频率_共模电感使用特性及选材
- Windows下GetLastError()返回值介绍
- 帆软参数设置_报表工具FineReport新版本参数全攻略
- 命令与征服4java攻略_《命令与征服4》全关卡任务流程攻略
- 四则运算之结对作业报告
- 华为手机怎么恢复微信聊天记录(2022最新版)
- 未成年人勿进 谨以献给1980~1990出生的人(三)
- 安装allennlp