普通类型的归档方法

归档: 名副其实的就是把所有东西归纳在一个文档或者文件里面, 当我们需要的时候才拿到编译器使用, 这个就和我们从网上下载视频到硬盘, 需要的时候再用播放器打开一样.

PS: 归档之后的文件不能正常的打开, 只能用CMD或者是编译器的一些代码读取并且释放, 注意, 是先读取后释放, 不然释放在读取前面, 就会找不到文件或者文档所在的路径, 从而无法还原代码.

下面是简单的文件归档和读取释放的例子:

Human.h文件

#import <Foundation/Foundation.h>

@interface Human : NSObject <NSCoding>  //注意, 这里必须得声明一个归档的协议
//NSCoding协议要必须实现两个方法
//- (void)encodeWithCoder:(NSCoder *)aCoder;
//编码给定文档接收者使用。(必需)

//- (id)initWithCoder:(NSCoder *)aDecoder;
//返回一个对象的初始化数据在给定文档。(必需)
//你必须返回自我与编码器:init。如果你有一个先进的需要,需要替换一个解码后不同的
//对象,你可以在清醒后使用编码器:。
{
@private    //声明私有的实例变量
    int age;
    NSString *name;
    Human *child;
}

@property (nonatomic, assign)int age;   //定义int类型的age属性.
@property (nonatomic, copy)NSString *name;  //定义NSString类型的name属性.
@property (nonatomic, retain)Human *child;  //定义human指针类型child.

@end

Human.m文件

#import "Human.h"

@implementation Human

@synthesize age;
@synthesize name;
@synthesize child;

- (void) encodeWithCoder:(NSCoder *)aCoder  //为了归档而重写的方法.
{
    [aCoder encodeInt:age forKey:@"age"];
    [aCoder encodeObject:name forKey:@"name"];
    [aCoder encodeObject:child forKey:@"child"];
}

- (id)initWithCoder:(NSCoder *)aDecoder //为了解档而重写的方法.
{
    if(self = [super init]){
        self.age = [aDecoder decodeIntForKey:@"age"];
        //根据intforkey来解档age
        self.name = [aDecoder decodeObjectForKey:@"name"];
        //根据objectforkey来解档name
        self.child = [aDecoder decodeObjectForKey:@"child"];
        //根据objectforkey来解档child
    }
    return self;
}
@end

main.m文件

#import <Foundation/Foundation.h>
#import "Human.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
//        NSLog(@"Hello, World");

        Human *human1 = [Human new];
        Human *human2 = [Human new];

        human1.age = 20;
        human1.name = @"xiaoming";
        human1.child = human2;

        NSData *data1 = [NSKeyedArchiver archivedDataWithRootObject:human1];
        [data1 writeToFile:@"/Users/Cain/Desktop/Objective-C/实验代码/归档/Human/human.txt" atomically:YES];
        //writetofile表示的是用来存储文档路径的方法.

        NSData *data2 = [NSData dataWithContentsOfFile:@"/Users/Cain/Desktop/Objective-C/实验代码/归档/Human/human.txt"];
        //datawithcontentsoffile是用来读取文档路径的方法.

        Human *human3 = [NSKeyedUnarchiver unarchiveObjectWithData:data2];
        //unarchiveobjectwithdata是用来还原文档的方法.

        NSLog(@"\nage = %d\nname = %@", human3.age, human3.name);
    }
    return 0;
}
时间: 2024-10-27 08:45:46

普通类型的归档方法的相关文章

没为类型 Node 定义方法 getTextContent (zz)

没有为类型 Node 定义方法 getTextContent (zz) 晚上下班的时候,把班上写了半截的代码带了回来.结果回到家后出乎意料的是回来的时候将代码导入eclipse后,下面这行代码就直接报错了,显示 getTextContent()未定义 . ((Element) ele.getElementsByTagName( "err_code").item(0 )).getTextContent(); 首先想到的是jdk 的版本问题,不可能啊,我昨天才装的jdk 1.6.0_24

PHP基础教程 常见PHP错误类型及屏蔽方法

PHP基础教程 常见PHP错误类型及屏蔽方法 程序只要在运行,就免不了会出现错误,错误很常见,比如Error,Notice,Warning等等.这篇文章兄弟连PHP培训小编来跟大家具体说一下PHP的错误类型和屏蔽方法.在PHP中,主要有以下3种错误类型. 1. 注意(Notices) 这些都是比较小而且不严重的错误,比如去访问一个未被定义的变量.通常,这类的错误是不提示给用户的,但有时这些错误会影响到运行的结果. 2. 警告(Warnings) 这就是稍微严重一些的错误了,比如想要包含inclu

iOS开发数据持久化,归档方法

1.把要显示的数据转换为模型,把对象归档,然后把存起来的对象解析出来就可以使用 2.可以封装起来方便使用,封装的方法存入百度云,需要的可以留言 /** 归档方法 */-(void)archive{    /**      *     常用的几个文件目录   directory目录     * NSDownloadsDirectory 下载文件目录     * NSDocumentDirectory 数据文件目录     * NSCachesDirectory 缓存文件目录     * NSMov

Path类型的扩展方法 z

写了一个基于System.IO.Path类型方法的扩展类型,用于快速对文件系统路径进行操作.如下图: 其中有许多方法就是直接调用Path类型的静态方法.比如AppendPath方法内部会直接调用Path.Combine.这些方法就不需要再介绍了.下面看一些许多说明的方法: ToDirectory方法会把一个文件路径放到文件夹路径内并返回结果,比如: var path =@"C:\a\b\c.jpg"; Console.WriteLine(path.ToDirectory(@"

(转)JavaScript中判断对象类型的种种方法

我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一个说明运算数类型的字符串.如:"number","string","boolean","object","function","undefined"(可用于判断变量是否存在). 但 type

将通讯录类(姓名、电话),添加归档和解归档方法,即,添加储存信息到磁盘的方法。

/*1.将通讯录类(姓名.电话),添加归档和解归档方法,即,添加储存信息到磁盘的方法.*/ #import <Foundation/Foundation.h>#import "ConTact.h"#define PATH @"/Users/qianfeng/Desktop/hehe/2.plist" int main(int argc, const char * argv[]) {    @autoreleasepool {        ConTact

PHP错误类型及屏蔽方法

PHP 错误类型及屏蔽方法 1. 注意( Notices ) 这些都是比较小而且不严重的错误, 比如去访问一个未被定义的变量. 通常, 这类的错误是 不提示给用户的,但有时这些错误会影响到运行的结果. 2. 警告( Warnings ) 这就是稍微严重一些的错误了, 比如想要包含 include() 一个本身不存在的文件. 这样的错误 信息会提示给用户,但不会导致程序终止运行. 3. 致命错误( Fatal errors ) 这些就是严重的错误, 比如你想要初始化一个根本不存在的类的对象, 或调

jquery ajax中支持哪些返回类型以及js中判断一个类型常用的方法?

1 jquery ajax中支持哪些返回类型在JQuery中,AJAX有三种实现方式:$.ajax() , $.post , $.get(). 预期服务器返回的数据类型.如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML.在 1.4 中,JSON 就会生成一个 JavaScript 对象,而 script 则会执行这个脚本.随后服务器端返回的数据会根据这个值解析后,传递给回调 函数.可用值: •"xml": 返回

iOS的动画效果类型及实现方法

实现iOS漂亮的动画效果主要有两种方法, 一种是UIView层面的, 一种是使用CATransition进行更低层次的控制, 第一种是UIView,UIView方式可能在低层也是使用CATransition进行了封装,它只能用于一些简单的.常用的效果展现,这里写一个常用的示例代码,供大家参考. [UIView beginAnimations:@"Curl"context:nil];//动画开始 [UIView setAnimationDuration:0.75]; [UIView se