先比較一下各个数据存储之间的关系:

关于归档。是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 协议。

四种存储数据的方式中上面的两种方式是仅仅能够存储对应的主要的数据类型。——> 产生归档的方式进行存储。

(能够存储对象)

假设对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,能够直接用NSKeyedArchiver进行归档和恢复
不是全部的对象都能够直接用这样的方法进行归档,仅仅有遵守了NSCoding协议的对象才干够
NSCoding协议有2个方法:
encodeWithCoder:

每次归档对象时,都会调用这种方法。一般在这种方法里面指定怎样归档对象中的每一个实例变量,能够使用encodeObject:forKey:方法归档实例变量

initWithCoder:

每次从文件里恢复(解码)对象时,都会调用这种方法。一般在这种方法里面指定怎样解码文件里的数据为对象的实例变量,能够使用decodeObject:forKey方法解码实例变量

数据存储值归档Archive的更多相关文章

  1. iOS开发UI篇—ios应用数据存储方式(归档)

    iOS开发UI篇—ios应用数据存储方式(归档)  一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同 ...

  2. iOS开发UI篇—ios应用数据存储方式(归档) :转发

    本文转发至:文顶顶http://www.cnblogs.com/wendingding/p/3775293.html iOS开发UI篇—ios应用数据存储方式(归档)  一.简单说明 在使用plist ...

  3. ios应用数据存储方式(归档) - 转

    一.简单说明  1.在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦.  2.偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置 ...

  4. IOS数据存储之归档/解档

    前言: 前天学习了NSUserDefaults,我们知道NSUserDefaults不能保存自定义对象,所以我们今天来认识一下归档(NSKeyedArchiver)和解档(NSKeyedUnarchi ...

  5. 数据存储之归档解档 NSKeyedArchiver NSKeyedUnarchiver

    在构建应用程序时,有一个重要的问题是如何在每次启动之间持久化数据,以便重现最后一次关闭应用前的状态.在iOS和OS X上,苹果提供了三种选择:Core Data.属性列表(Property List) ...

  6. ios数据存储——对象归档

    归档:数据从内存与闪存相互转化,类似“序列化”,将数据转换成二进制字节数据 操作:有两种方式,第一种是单个对象作为root进行归档和恢复,一个对象一个文件:第二种,可以同时归档多个对象到一个文件 注意 ...

  7. IOS s数据存储之归档解档

    #import <Foundation/Foundation.h> @interface Student : NSObject <NSCoding>; @property(no ...

  8. iOS数据存储之对象归档

    iOS数据存储之对象归档 对象归档 对象归档是iOS中数据持久化的一种方式. 归档是指另一种形式的序列化,但它是任何对象都可以实现的更常规的类型.使用对模型对象进行归档的技术可以轻松将复杂的对象写入文 ...

  9. iOS数据持久化存储之归档NSKeyedArchiver

    归档是一种很常用的文件储存方法,几乎任何类型的对象都能够被归档储存(实际上是一种文件保存的形式),收集了网上的一些资料并结合自己的一些经验,总结如下. 一.使用archiveRootObject进行简 ...

随机推荐

  1. caioj 1070 动态规划入门(二维一边推3:字符距离)(最长公共子序列拓展)

    复制上一题总结 caioj 1069到1071 都是最长公共字序列的拓展,我总结出了一个模型,屡试不爽    (1) 字符串下标从1开始,因为0用来表示字符为空的情况,而不是第一个字符     (2) ...

  2. 紫书 例题 10-12 UVa 1637(概率计算)

    以9元组来代表当前状态,每一元是每一堆剩下的牌数 枚举当前状态所有可以拿掉牌的情况,然后递归下去求 概率,当牌拿完的时候概率为1 那么这里的实现非常的秀,用到了vector来代表9元组 然后还用到了m ...

  3. 洛谷—— P1926 小书童——刷题大军

    https://www.luogu.org/problem/show?pid=1926#sub 题目背景 数学是火,点亮物理的灯:物理是灯,照亮化学的路:化学是路,通向生物的坑:生物是坑,埋葬学理的人 ...

  4. js使用offsetHeight获取div高度为0的问题

    今晚试了好久没弄出来,后来获取子一层的div就能获取到高度了 我的情况是这样的:我在最外面写一个<div id="mainBody">,  里面写bootstrap的d ...

  5. jsp静态引入(<%@ include file=""%>) 乱码问题

    在web.xml中的web-app中加入这段话: <jsp-config> <jsp-property-group> <display-name>JSPConfig ...

  6. 把握linux内核设计思想(三):下半部机制之软中断

    [版权声明:尊重原创.转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途]         中断处理程序以异步方式执行,其会打断其它重要代码,其执行时该中 ...

  7. Gonet2 游戏server框架解析之gRPC提高(5)

    上一篇blog是关于gRPC框架的基本使用,假设说gRPC仅仅是远程发几个參数,那和一个普通的http请求也没多大区别了. 所以今天我就来学习一下gRPC高级一点的用法. 流! 流能够依据用法,分为单 ...

  8. Linux系统的LOG日志文件及入侵后日志的清除

    UNIX网管员主要是靠系统的LOG,来获得入侵的痕迹.当然也有第三方工具记录入侵系统的 痕迹,UNIX系统存放LOG文件,普通位置如下: /usr/adm - 早期版本的UNIX/var/adm -  ...

  9. 图解RHEL6从安装光盘中进行yum安装

    图解RHEL6从安装光盘中进行yum安装 导读:我们这里讲的Yum,是Yellow dog Updater, Modified的缩写,可执行程序名为yum,它的理念是使用一个中心仓库(reposito ...

  10. 互联网金融研究组:P2P借贷平台:性质、风险与监管(上)

    互联网金融研究组(): P2P借贷平台:性质.风险与监管(上) 目 录 一.性质与合法性 1.  P2P网络借贷 1.1  概念重新界定 1.2  发展概况与特点 2.  延伸模式及其合法性浅析 2. ...