iOS数据存储简要笔记
1. 数据存储常用的方式
(1)XML 属性列表(plist)归档
(2)preference(偏好设置)
(3)NSKeyedArchiver归档(NSCoding)
(4) SQLite3
2. 应用沙盒(文件系统根目录)
2.1. 应用沙盒结构分析
- Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录
- tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录
- Library/Caches:保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积大、不需要备份的非重要数据
- Library/Preference:保存应用的所有偏好设置,iOS的Settings(设置)应用会在该目录中查找应用的设置信息。iTunes同步设备时会备份该目录
2.2. 应用沙盒目录的常见获取方式
- 沙盒根目录:NSString *home = NSHomeDirectory();
- N01.Documents:(2种方式)
- (1)利用沙盒根目录拼接”Documents”字符串
NSString *home = NSHomeDirectory();
NSString *documents = [home stringByAppendingPathComponent:@"Documents"];
// 不建议采用,因为新版本的操作系统可能会修改目录名
- (2)利用NSSearchPathForDirectoriesInDomains函数
// NSUserDomainMask 代表从用户文件夹下找
// YES 代表展开路径中的波浪字符“~”
NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO);
// 在iOS中,只有一个目录跟传入的参数匹配,所以这个集合里面只有一个元素
NSString *documents(也是path) = [array objectAtIndex:0];
- NO2.tmp:NSString *tmp = NSTemporaryDirectory();
- NO3.Library/Caches:(跟Documents类似的2种方法)
- (1)利用沙盒根目录拼接”Caches”字符串
- (2)利用NSSearchPathForDirectoriesInDomains函数(将函数的第2个参数改为:NSCachesDirectory即可)
- NO4.Library/Preference:通过NSUserDefaults类存取该目录下的设置信息
3.. 属性列表
XML 属性列表(plist)归档
- 属性列表是一种XML格式的文件,拓展名为plist
- 如果对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,就可以使用writeToFile:atomically:方法直接将对象写到属性列表文件中
属性列表-NSDictionary的存储和读取过程
4. 偏好设置
preference(偏好设置)
- 每个应用都有个NSUserDefaults实例,通过它来存取偏好设置
- 比如,保存用户名、字体大小、是否自动登录
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"itcast" forKey:@"username"];
[defaults setFloat:18.0f forKey:@"text_size"];
[defaults setBool:YES forKey:@"auto_login"];
- 读取上次保存的设置
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *username = [defaults stringForKey:@"username"];
float textSize = [defaults floatForKey:@"text_size"];
BOOL autoLogin = [defaults boolForKey:@"auto_login"];
- 注意:UserDefaults设置数据时,不是立即写入,而是根据时间戳定时地把缓存中的数据写入本地磁盘。所以调用了set方法之后数据有可能还没有写入磁盘应用程序就终止了。出现以上问题,可以通过调用synchornize方法强制写入
[defaults synchornize];
5. NSKeyedArchiver
NSKeyedArchiver归档(NSCoding)
- 如果对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,可以直接用NSKeyedArchiver进行归档和恢复
- 不是所有的对象都可以直接用这种方法进行归档,只有遵守了NSCoding协议的对象才可以
- NSCoding协议有2个方法:
- (1)encodeWithCoder:
每次归档对象时,都会调用这个方法。一般在这个方法里面指定如何归档对象中的每个实例变量,可以使用encodeObject:forKey:方法归档实例变量
- (2)initWithCoder:
每次从文件中恢复(解码)对象时,都会调用这个方法。一般在这个方法里面指定如何解码文件中的数据为对象的实例变量,可以使用decodeObject:forKey方法解码实例变量
如果父类也遵守了NSCoding协议,请注意:
- 应该在encodeWithCoder:方法中加上一句
[super encodeWithCode:encode];
确保继承的实例变量也能被编码,即也能被归档
- 应该在initWithCoder:方法中加上一句
self = [super initWithCoder:decoder];
确保继承的实例变量也能被解码,即也能被恢复
6. SQLite3
- SQLite3是一款开源的嵌入式关系型数据库,可移植性好、易使用、内存开销小
- SQLite3常用的5种数据类型:text、integer、float、boolean、blob
- 在iOS中使用SQLite3,首先要添加库文件libsqlite3.dylib和导入主头文件
转载于:https://www.cnblogs.com/Free-Thinker/p/6428787.html
iOS数据存储简要笔记相关推荐
- IOS数据存储 之WCDB (一)
IOS数据存储 之WCDB (一) 1. WCDB 简介 1.1 使用WCDB框架3大优势 1.2 WCDB 的一些基础概念 1.2.1 类字段绑定(ORM) 1.2.2 WINQ(WCDB语言集成查 ...
- IOS数据存储 之WCDB (二)WCDB.swift使用篇
IOS数据存储 之WCDB (二)WCDB.swift使用篇 1.WCDB.Swfit基础使用 1.1 WCDB.Swfit 简介 1.1.1 模型绑定 1.1.2 创建数据库与表 1.1.3 操作数 ...
- IOS数据存储之文件沙盒存储
前言: 之前学习了数据存储的NSUserDefaults,归档和解档,对于项目开发中如果要存储一些文件,比如图片,音频,视频等文件的时候就需要用到文件存储了.文件沙盒存储主要存储非机密数据,大的数据. ...
- iOS数据存储——沙盒。
iOS数据的持久化,可以通过以下途径解决 1.通过文件管理\归档来解决. 2.如果只是少量数据,可通过NSUserDefaults解决,相当于android中的sharedPreferences. 3 ...
- iOS数据存储-钥匙串存储
2017.11.20 14:41* 字数 227 阅读 678评论 0喜欢 0 钥匙串介绍 1. 表示设备唯一号的标识,在IOS7中要么被禁止使用,要么重新安装程序后两次获取的标识符不一样. 2. ...
- IOS数据存储5种方式
iOS中的数据存储(上) iOS应用数据存储的常用方式: 应用沙盒: 应用沙盒结构分析 Documents: temp: Library/Caches: Library/Preference: 沙盒根 ...
- mysql棋牌管理_棋牌架构DB服务(Mysql+Redis)数据存储演进笔记
自新项目开展以来,需要接触与数据存储打交道那一块业务,以前的项目开发过程中因为写的都是棋牌玩法相关的业务逻辑,虽然也私下看过DB服务代码,但是当时对数据库与缓存的理解还是停留在语法使用层面,所以对DB ...
- IOS数据存储 —— 1 沙盒(数据存储目录)
沙盒结构 沙盒的文件系统⽬录,如下图所示(假设应用的名称叫Layer) 1.Documents 目录 您应该将所有的应用程序数据文件写入到这个目录下. 这个目录用于存储用户数据或其它应该定期备份的信息 ...
- JS高级——JSON、数据存储学习笔记
在目前的开发中,JSON是一种非常重要的数据格式,它并不是编程语言,而是一种可以在服务器和客户端之间传输的数据格式. JSON的全称是JavaScript Object Notation(JavaSc ...
最新文章
- 吵疯了,Pull Request到底是个啥?
- 分享一下我的初中生活
- Android SystemProperties设置/取得系统属性的用法总结
- 安装phpcms时出现Warning: ob_start(): output handler \'ob_gzhandler\' conflicts with \'zlib
- 新手上路之django项目开发(一)-----创建项目并运行
- Mac OS X下查看CPU信息
- 在大公司天天调参数,感觉快废了~
- Javascript Math ceil()、floor()、round()三个函数的区别
- 链表冒泡排序java_055-冒泡排序算法代码实现
- 移动端,h5页面1px 1像素边框过粗解决方案
- 高通QCC3005_datasheet
- ORBSLAM3 的改进
- android ntp服务器配置
- 网络安全:IP地址定位方式
- 《Rework》摘录及感想
- 户外LED透明屏与室内透明屏区别,选型号建议
- Flask-定时任务
- 计算机自带的加密,加密,详细教您如何用自带Bitlocker来为电脑磁盘加密
- 关于kernels启动报错的问题
- vi编辑器中的常用命令
热门文章
- python用中文怎么说-如何用Python做中文分词?
- python下载安装教程3.7.3-【最新】Python-3.7.0安装教程及下载链接
- python turtle画熊-基于turtle的Python作画
- python画图颜色-python中matplotlib的颜色及线条控制的示例
- python下载了怎么打开-下载python后如何启动
- python百度网盘-bypy-百度网盘Python客户端 linux
- python教学网站-自学python有什么网站
- python的用途实例-python中类方法,实例方法,静态方法的作用和区别
- python csv读取-python如何读取csv数据
- python turtle画彩虹-Python turtle 绘制彩色螺旋线