04-IOSCore - User Defaults、Archive、存储总结
一、 User Defaults
1. 是什么?
是一个特殊的plist文件
2. 干什么?
用于保存应用的配置信息
3. 存什么信息?
信息:欢迎界面有没有被打开过
目的:欢迎界面只显示一次
信息:应用程序被打开的次数/使用的时间长度/交互的次数
目的:当应用程序被打开10次后 请求用户对程序打星
信息:数据版本信息
目的:数据迁移
1.0
1|TXT|数据迁移
2.0
2212|26782162|TXT|数据迁移|3278232234562734
信息:默认信息
目的:打开应用程序后 显示默认帐号名
- (void)viewDidLoad
{
[superviewDidLoad];
// 判断用户是否是第一次打开
// 获取用户默认standardUserDefaults
NSUserDefaults *userDefault = [NSUserDefaultsstandardUserDefaults];
BOOL opened = [userDefault boolForKey:@"opened"]; // 获取key值opened
[userDefault setBool:YESforKey:@"opened"]; // 设置key值opened
[userDefault synchronize]; // 同步
}
练习:
使用User Defaults
当程序被打开10次时,弹出UIAlertView
提示用户打星
二、archive归档
plist是对象和plist之间的转换
archive是对象(任何)到NSData的渠道
对象到NSData(归档)步骤:
归档(拆毛衣)
NSObject 对象 毛衣
NSMutableData 字节 毛线团
NSKeyedArchiver 归档器 拆毛线针
NSCoder 字节片段 毛线段
反归档(织毛衣)
NSData 字节 毛线团
NSKeyedUnarchiver 反归档器 织毛线针
NSObject 对象 毛衣
NSCoder 字节片段 毛线段
注意:对于每一个支持Archive的对象
1) 必须遵循NSCoding协议
2) 必须覆盖
initWithCoder
encodeWithCoder
知识点:[aCoder encodeObject:self.fatherforKey:@"father"]; // 该属性是对象,程序执行到这里会进入到该对象里进行归档(该对象必须实现归档方法),所以有多个有关联的对象只归档一个就行了
代码如下:
- (void)viewDidLoad
{
[superviewDidLoad];
MXPerson *person = [[MXPersonalloc] init];
person.name = @"张三";
person.age = 19;
// 对象 -> NSData 归档
// 1 创建可变data 构建毛线团
NSMutableData *data = [NSMutableDatadata];
// 2 创建archive对象 准备拆线器
NSKeyedArchiver *archiver = [[NSKeyedArchiveralloc] initForWritingWithMutableData:data];
// 3 编码 拆线
[archiver encodeObject:person forKey:@"person"];
// 4 完成 收线
[archiver finishEncoding];
// NSData -> 对象
// 获取到data 构建毛线团
// 创建反归档对象 准备织毛线针
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiveralloc] initForReadingWithData:data];
// 织毛衣
MXPerson *p2 = [unarchiver decodeObjectForKey:@"person"];
}
三、存储总结
1. 解决的核心问题
在一台设备上保持数据
内存里的对象 <-> 硬盘上的文件
能够让内存中的对象延长生命周期
2. 渠道
1) 基础文件存储
内存对象 NSData 文件
NSString <-------------------> 文件
从右向左API: <--
+ stringWithContentsOfFile:encoding:error:
+ stringWithContentsOfFile:usedEncoding:error:
从左向右API:->
– writeToFile:atomically:encoding:error:
NSString <---> NSData
<-
– initWithData:encoding:
->
– dataUsingEncoding:
UIImage <--------------------> 文件
<-
+ imageNamed: Bundle内的
+ imageWithContentsOfFile: 任何
UIImage <----> NSData
<-
- initWithData:
NSData <------> 文件
<-
+ dataWithContentsOfFile:
->
- writeToFile:
a) 你是否需要分块读取/写入文件?
需要:请使用NSFileHandle进行文件读取,替代 NSData <----> 文件
情形:文件追加
b) 你是否需要存储自定义对象
是
b.1) 模型层对象少,对象简单,关系不复杂
自行构建
对象 <----> NSString
->
拼凑字符串
<-
拆分字符串
b.2) 对象结构复杂
跳转到 2)
2) Plist文件存储
plist支持对象 <-> plist文件
<-
+ arrayWithContentsOfFile:
+ dictionaryWithContentsOfFile:
->
- writeToFile:atomically:
手工处理
自定义对象 <-> plist支持对象
<->
对象 字典
+ 属性 + key-value
a) 该对象需要跨平台么?
需要:
放弃plist存储,改为自定义XML格式存储
自行构建 对象 <-> xml 的渠道
xml字符串 <-> NSData 。。。继续参考1)
b) 该数据是否是应用程序相关?
是应用程序,而不是业务相关
需要:
放弃plist存储,改为NSUserDefaults存储
c) 对象之间的关系是不是很复杂,对象的属性需要不需要可读
如果关系复杂,不需要可读
请转接 3)
3) Archive 存储
对象 <-> NSData
<-
反归档 decode unarchive
+ initWithCoder
->
归档 encode archive
- encodeWithCoder
NSData <-> 文件之间的渠道 请参见1)
1.2.3.z)
你希望不希望少写解析代码?
你希望不希望更高级的查询消息?
你希望不希望不关心文件的存储位置?
你希望不希望处理更复杂的对象关系?
如果你都希望
请转接 4)
4) SQL数据库 & Core Data
作业、
1. TMusic 升级
1) 欢迎界面只显示一次
2) 登陆过的人,不需要再登陆
不支持多帐号
单词
Archive 归档 A. Er1 Kai4 Vu.
Encode 编码 Yin3 Kou4 De.
Decode 解码 Di1 Kou4 De.
Coder 码 Kou1 De.
04-IOSCore - User Defaults、Archive、存储总结的更多相关文章
- MySQL Archive存储引擎
200 ? "200px" : this.width)!important;} --> 介绍 从archive单词的解释我们大概可以明白这个存储引擎的用途,这个存储引擎基本上 ...
- mysql archive存储引擎导入数据报duplicate key
DROP TABLE IF EXISTS `test`;CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `ve ...
- ubuntu14.04禁用USB外存储设备
ubuntu 14.04中禁用usb外存储设备: 在网上找了很多方法,大概都是下面的命令,而实际测试的时候没有什么作用. gsettings set org.gnome.desktop.media-h ...
- [转帖]mysql常用存储引擎(InnoDB、MyISAM、MEMORY、MERGE、ARCHIVE)介绍与如何选择
mysql常用存储引擎(InnoDB.MyISAM.MEMORY.MERGE.ARCHIVE)介绍与如何选择原创web洋仔 发布于2018-06-28 15:58:34 阅读数 1063 收藏展开 h ...
- 涂抹mysql笔记-InnoDB/MyISAM及其它各种存储引擎
存储引擎:一种设计的存取和处理方式.为不同访问特点的表对象指定不同的存储引擎,可以获取更高的性能和处理数据的灵活性.通常是.so文件,可以用mysql命令加载它. 查看当前mysql数据库支持的存储引 ...
- mysql中常见的存储引擎和索引类型
存储引擎 1. 定义 存储引擎说白了就是如何存储数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类 ...
- [MySQL Reference Manual]15. 其他存储引擎
15. 其他存储引擎 15. 其他存储引擎 15.1 设置存储引擎 15.2 MyISAM存储引擎 15.2.1 MyISAM启动选项 15.2.2 Key的空间要求 15.2.3 MyISAM表存储 ...
- MySQL学习笔记七:存储引擎
1.MySQL存储引擎的设计采用“插件式”方案,用户可以很方便地选择使用哪种存储引擎,想使用mysql没有提供的引擎时,可以自己安装进去. 查看支持的存储引擎 mysql> show engin ...
- MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述
MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述: 1.MySQL有多种存储引擎: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(Berk ...
随机推荐
- 道路软件质量:SourceMonitor
有些事情必须这样做,不是幸福,但是,缓解疼痛,因为不.更痛苦--这是无奈. 夏中义 <文心独白> 1 简介 博客没有更新了一段时间,了阿里上市的成功之处:选择和坚持.事实上人生并没有绝对的 ...
- 如何设计一个 iOS 控件?(iOS 控件完全解析)
前言 一个控件从外在特征来说,主要是封装这几点: 交互方式 显示样式 数据使用 对外在特征的封装,能让我们在多种环境下达到 PM 对产品的要求,并且提到代码复用率,使维护工作保持在一个相对较小的范围内 ...
- IE浏览器下<A>标签不能显示背景图片
修改前 background: url('./img/active/legendBg.png')no-repeat 修改后 background: url('./img/active/legendBg ...
- 使用命令部署wsp包,并将其部署到不同的web应用程序
http://www.c-sharpcorner.com/uploadfile/anavijai/how-to-deploy-a-wsp-using-powershell-in-sharepoint- ...
- gcc代码反汇编查看内存分布[1]: gcc
# gcc -vgcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5) 重点: 代码中的内存分配, 地址从低到高: 代码段(RO, 保存函数代码) --&g ...
- UVa----------1594(Ducci Sequence)
题目: 1594 - Ducci Sequence Asia - Seoul - 2009/2010A Ducci sequence is a sequence of n-tuples of inte ...
- HTML5 总结-拖放-3
HTML5 拖放 拖放(Drag 和 drop)是 HTML5 标准的组成部分. 拖放 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放 ...
- Oracle 字段是多个值的字符串的查询处理
1.创建两张表一张用户表(T_User),一张兴趣小组表T_Group,其中小组成员字段存储用户ID列表以逗号隔开, 表:T_User 编号(F_ID) 名称(用户名) 1 张三 2 李四 3 王五 ...
- __call重载方法
<?php class Person { function du() { echo "这是一个存在的方法"; } //该方法有两个参数,第一个参数 $function_nam ...
- C语言回溯算法解决N皇后问题
回溯算法的模型是 x++, not satisfy ? x-- : continue. 代码中x作列号,y[x]保存第x列上皇后放置的位置. #include<stdio.h> #incl ...