一、 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、存储总结的更多相关文章

  1. MySQL Archive存储引擎

    200 ? "200px" : this.width)!important;} --> 介绍 从archive单词的解释我们大概可以明白这个存储引擎的用途,这个存储引擎基本上 ...

  2. mysql archive存储引擎导入数据报duplicate key

    DROP TABLE IF EXISTS `test`;CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `ve ...

  3. ubuntu14.04禁用USB外存储设备

    ubuntu 14.04中禁用usb外存储设备: 在网上找了很多方法,大概都是下面的命令,而实际测试的时候没有什么作用. gsettings set org.gnome.desktop.media-h ...

  4. [转帖]mysql常用存储引擎(InnoDB、MyISAM、MEMORY、MERGE、ARCHIVE)介绍与如何选择

    mysql常用存储引擎(InnoDB.MyISAM.MEMORY.MERGE.ARCHIVE)介绍与如何选择原创web洋仔 发布于2018-06-28 15:58:34 阅读数 1063 收藏展开 h ...

  5. 涂抹mysql笔记-InnoDB/MyISAM及其它各种存储引擎

    存储引擎:一种设计的存取和处理方式.为不同访问特点的表对象指定不同的存储引擎,可以获取更高的性能和处理数据的灵活性.通常是.so文件,可以用mysql命令加载它. 查看当前mysql数据库支持的存储引 ...

  6. mysql中常见的存储引擎和索引类型

    存储引擎 1.      定义 存储引擎说白了就是如何存储数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类 ...

  7. [MySQL Reference Manual]15. 其他存储引擎

    15. 其他存储引擎 15. 其他存储引擎 15.1 设置存储引擎 15.2 MyISAM存储引擎 15.2.1 MyISAM启动选项 15.2.2 Key的空间要求 15.2.3 MyISAM表存储 ...

  8. MySQL学习笔记七:存储引擎

    1.MySQL存储引擎的设计采用“插件式”方案,用户可以很方便地选择使用哪种存储引擎,想使用mysql没有提供的引擎时,可以自己安装进去. 查看支持的存储引擎 mysql> show engin ...

  9. MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述

    MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述: 1.MySQL有多种存储引擎: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(Berk ...

随机推荐

  1. iOS圆盘转动引导图的简单实现

    最近更新的一批app,好多都采用了圆盘转动的效果,比如:百度音乐.当当,大概效果如下: 看看这个是怎么实现的吧. 一.视图元素布局 首先需要明确,这些视图元素是分布在一个圆周上的,通过滑动位置,以圆周 ...

  2. 用户 'IIS APPPOOL\DefaultAppPool' 登录失败解决办法

    法一:将iis站点的应用程序池的用户改为本地用户,如果所示: 方法二: 1.打开sql server  management studio安全性->登录名->右击新建登录名->常规- ...

  3. Opencv 完美配置攻略 2014 (Win8.1 + Opencv 2.4.8 + VS 2013)下

    前面说了一些在OpenCV在VS2013下的配置的过程,下面说一下其中的个别的知识点,了解一下这样配置的一点点更细节的过程.其实配置项目属性的时候,有两种方式: 一.通过项目属性管理器配置项目属性表 ...

  4. python命令行解析工具argparse模块【4】

            上一节我们讲解了add_argument()方法,这一节我们将学习parse_args()方法.          parse_args()方法的作用是解析命令行参数,并返回解析之后的 ...

  5. 运用Python语言编写获取Linux基本系统信息(二):文件系统使用情况获取

    本文跟着上一篇文章继续写,上一篇文章的链接 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 一.随便说说 获取文件系统使用情况的思路和上一篇获取主要系统是 ...

  6. linux小命令

    本文主要记录了我在工作中用到的一些linux命令 1.查询linux系统是32位还是64位 zhaolei@zhaolei :~# file /usr/bin/whoami/usr/bin/whoam ...

  7. 转: seajs知识点与cmd规范

    在比较之前,我们得先来了解下什么是AMD规范?什么是CMD规范?当然先申明一下,我个人也是总结下而已,也是网上看到的资料,自己总结下或者可以说整理下而已,供大家更深入的了解!因为我们都知道 AMD规范 ...

  8. spring mvc 分页

    spring mvc 分页

  9. tomcat简介之web.xml详解(转)

    http://blog.csdn.net/facepp/archive/2008/04/19/2306602.aspx 位于每个Web应用的WEB-INF路径下的web.xml文件被称为配置描述符,这 ...

  10. JavaEE Tutorials (4) - 企业bean入门

    4.1创建企业bean52 4.1.1编写企业bean类53 4.1.2创建converter Web客户端53 4.1.3运行converter示例544.2修改Java EE应用55 4.2.1修 ...