数据存储值归档Archive
先比較一下各个数据存储之间的关系:
关于归档。是ios中的shu'j数据存储中的一种数据存储方式。以下了解一下归档中的一个实例:
以下的是父类person
#import <Foundation/Foundation.h> @interface Person : NSObject <NSCoding>
@property (nonatomic,copy) NSString *name;
@property (nonatomic,assign) int age;
@property (nonatomic,assign ) BOOL sex;
@property (nonatomic,assign) float height;
@property (nonatomic,assign) double weight;
@end #import "Person.h" @implementation Person //有存必然是有取。所以存是为了取
- (id)initWithCoder:(NSCoder *)aDecoder{
self = [super init];
if (self) {
NSLog(@"存在");
self.name = [aDecoder decodeObjectForKey:@"name"];
self.age = [aDecoder decodeInt32ForKey:@"age"];
self.sex = [aDecoder decodeBoolForKey:@"sex"];
self.height = [aDecoder decodeFloatForKey:@"height"];
self.weight = [aDecoder decodeDoubleForKey:@"weight"];
}
return self;
} -(void)encodeWithCoder:(NSCoder *)aCoder{ //有文件就能够看出编码的是一个方式编码
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInt:self.age forKey:@"age"];
[aCoder encodeBool:self.sex forKey:@"sex"];
[aCoder encodeFloat:self.height forKey:@"height"];
[aCoder encodeDouble:self.weight forKey:@"weight"]; }
@end
子类student继承person类: #import <Foundation/Foundation.h>
#include "Person.h" @interface Student : Person @property (nonatomic,copy )NSString * content;
@property (nonatomic,assign ) float grade; @end
#import "Student.h" @implementation Student //有存必然是有取,所以存是为了取
- (id)initWithCoder:(NSCoder *)aDecoder{ if (self = [super initWithCoder:aDecoder]) {
NSLog(@"存在");
self.content = [aDecoder decodeObjectForKey:@"content"];
self.grade = [aDecoder decodeFloatForKey:@"grade"];
}
return self;
} -(void)encodeWithCoder:(NSCoder *)aCoder{ [super encodeWithCoder:aCoder];
//有文件就能够看出编码的是一个方式编码
[aCoder encodeObject:self.content forKey:@"content"];
[aCoder encodeFloat:self.grade forKey:@"grade"]; } @end
以下是在ViewController中中对数据通过两button对数据进归档和解归档
#import "ViewController.h"
#import "Person.h"
#import "Student.h" @interface ViewController ()
//分别室保存和获取的两个button
- (IBAction)saveArchive:(id)sender;
- (IBAction)obtainUnarchive:(id)sender;
@end @implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
} //保存数据
- (IBAction)saveArchive:(id)sender { NSLog(@"開始编码归档而且保存");
//归档需要要素:1、保存对象 2、保存的文件文件夹 3、保存管理器(归档器) //获取要保存的对象,对象必需要幼稚等等
// Person *person = [[Person alloc]init];
// person.age = 18;
// person.name = @"linyu";
// person.sex = YES; //表示为男的
// person.height = 180;
// person.weight = 60; Student *stu = [[Student alloc]init];
stu.age = 18;
stu.name = @"linyu";
stu.sex = YES;
stu.height = 180;
stu.weight = 60;
stu.content = @"I am a student !";
stu.grade = 98.9; //获取要保存文件的路径
NSString *documentDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString * dir = [documentDir stringByAppendingString:@"doc.txt"];
NSLog(@"%@",dir);
[NSKeyedArchiver archiveRootObject:stu toFile:dir];
} //获取数据
- (IBAction)obtainUnarchive:(id)sender {
//获取归档之后的内容、
NSLog(@"获取内容");
NSString *documentDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString * dir = [documentDir stringByAppendingString:@"doc.txt"];
Student *per = [NSKeyedUnarchiver unarchiveObjectWithFile:dir];
NSLog(@"%@",dir);
NSLog(@"%@ %d %d %.2f %.2f %.2f %@",per.name,per.age,per.sex,per.height,per.weight,per.grade,per.content);
}
@end
输出的结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
总结:
我们能够知道文件归档:
1、编号设置(preferrence)NSUserDefault:这个事实上也是通过plist文件来存储的。仅仅只是时里面已经通过封装了以后台上面了。存储在preferrence文件里。
2、plist文件。通过自己获取文件的路径(而且创建)。将数据存储到里面。这里一般都是在dorectory这个文件夹以下。
3、归档:归档的数据存储是经过一定的压缩。所以显示的不是明文的存储方式,而且归档是用来存储对象的。
4、注意要存储的类中遵循NSCoding 协议。
四种存储数据的方式中上面的两种方式是仅仅能够存储对应的主要的数据类型。——> 产生归档的方式进行存储。
(能够存储对象)
每次归档对象时,都会调用这种方法。一般在这种方法里面指定怎样归档对象中的每一个实例变量,能够使用encodeObject:forKey:方法归档实例变量
每次从文件里恢复(解码)对象时,都会调用这种方法。一般在这种方法里面指定怎样解码文件里的数据为对象的实例变量,能够使用decodeObject:forKey方法解码实例变量
数据存储值归档Archive的更多相关文章
- iOS开发UI篇—ios应用数据存储方式(归档)
iOS开发UI篇—ios应用数据存储方式(归档) 一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同 ...
- iOS开发UI篇—ios应用数据存储方式(归档) :转发
本文转发至:文顶顶http://www.cnblogs.com/wendingding/p/3775293.html iOS开发UI篇—ios应用数据存储方式(归档) 一.简单说明 在使用plist ...
- ios应用数据存储方式(归档) - 转
一.简单说明 1.在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦. 2.偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置 ...
- IOS数据存储之归档/解档
前言: 前天学习了NSUserDefaults,我们知道NSUserDefaults不能保存自定义对象,所以我们今天来认识一下归档(NSKeyedArchiver)和解档(NSKeyedUnarchi ...
- 数据存储之归档解档 NSKeyedArchiver NSKeyedUnarchiver
在构建应用程序时,有一个重要的问题是如何在每次启动之间持久化数据,以便重现最后一次关闭应用前的状态.在iOS和OS X上,苹果提供了三种选择:Core Data.属性列表(Property List) ...
- ios数据存储——对象归档
归档:数据从内存与闪存相互转化,类似“序列化”,将数据转换成二进制字节数据 操作:有两种方式,第一种是单个对象作为root进行归档和恢复,一个对象一个文件:第二种,可以同时归档多个对象到一个文件 注意 ...
- IOS s数据存储之归档解档
#import <Foundation/Foundation.h> @interface Student : NSObject <NSCoding>; @property(no ...
- iOS数据存储之对象归档
iOS数据存储之对象归档 对象归档 对象归档是iOS中数据持久化的一种方式. 归档是指另一种形式的序列化,但它是任何对象都可以实现的更常规的类型.使用对模型对象进行归档的技术可以轻松将复杂的对象写入文 ...
- iOS数据持久化存储之归档NSKeyedArchiver
归档是一种很常用的文件储存方法,几乎任何类型的对象都能够被归档储存(实际上是一种文件保存的形式),收集了网上的一些资料并结合自己的一些经验,总结如下. 一.使用archiveRootObject进行简 ...
随机推荐
- 【CS Round #36 (Div. 2 only) A】Bicycle Rental
[题目链接]:https://csacademy.com/contest/round-36/task/bicycle-rental/ [题意] 让你从n辆车中选一辆车; 每一辆车有3个属性 1.到达车 ...
- 13 hbase源码系列(十三)缓存机制MemStore与Block Cache
这一章讲hbase的缓存机制,这里面涉及的内容也是比较多,呵呵,我理解中的缓存是保存在内存中的特定的便于检索的数据结构就是缓存. 之前在讲put的时候,put是被添加到Store里面,这个Store是 ...
- uvalive 4730王国kingdom(并查集+线段树)
题意:有T组測试数据.每组数据的N表示有N个城市,接下来的N行里每行给出每一个城市的坐标(0<=x,y<=1000000),然后有M(1<M<200000)个操作,操作有 ...
- HDU 1005 Number Sequence(矩阵)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...
- img下面的留白解决
在做网页的时候经常会出现一个令人困惑的现象.那就是行内元素和块级元素之间会出现“留白”.就是块级元素中明明只有一个行内元素,但行内元素却不会铺满块级元素.像这个例子: “留白”出现的原因 行内元素默认 ...
- Centos7.6下安装Python3.7
前言 话说不会开发的运维不是一个好的DBA,所以我要开始学习python了,写博客记录一下我的学习过程,另外别欺负我新来的,那个每天更博的技术流ken是我哥. 不说了,时间宝贵,开整. 1.首先来看一 ...
- python 发送邮件 <QQ+腾讯企业邮箱>
一.使用QQ邮箱或者腾讯企业邮箱 python 发送邮件属于网络编程方向的,在工作中,我需要经常用邮件来检测我的程序运行状况.使用起来十分方便,这里我就用腾讯企业邮箱作为我的收发邮箱来使用. 使用py ...
- Annotation中Result的params属性
这个属性只有在重定向时有用,而转发时不会设置参数. 如: @Results({ @Result(name="success", location="page", ...
- js实现table排序(jQuery下的jquery.sortElements)
项目中要实现table排序的功能. 网上有非常多解决方式,非常多都基于jQuery. jquery.tablesorter.大小17KB.只是他的首页在ie10下兼容性有点问题. DataTables ...
- Project Euler :Problem 54 Poker hands
In the card game poker, a hand consists of five cards and are ranked, from lowest to highest, in the ...