博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发之数据存储之NSKeyedArchiver
阅读量:7201 次
发布时间:2019-06-29

本文共 1233 字,大约阅读时间需要 4 分钟。

hot3.png

1、概述

NSKeyedArchiver归档和plist文件存储不同的是NSKeyedArchiver可以直接保存对象。如果对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,可以直接用NSKeyedArchiver进行归档和恢复。不是所有的对象都可以直接用这种方法进行归档,只有遵守了NSCoding协议的对象才可以被存储。

NSCoding协议中的2个方法:

1encodeWithCoder:

存对象时该方法必须实现,每次归档对象时,都会调用这个方法。一般在这个方法里面指定如何归档对象中的每个实例变量,可以使用encodeObject:forKey:方法归档实例变量。即指定存储哪些属性和在文件中以什么名字作为key存储这些属性。例如:

[encode  encodeObject:_name  forKey:@”name”];

系统下次从文件中取_name的值就自动用name这个key去取,后面再通过initWithCoder方法把取出的值赋值给_name。类似地:

[encode  encodeInt:_age  forKey:@”age”];

2initWithCoder:

取对象时该方法必须实现,每次从文件中恢复(解码)对象时,都会调用这个方法。一般在这个方法里面指定如何解码文件中的数据为对象的实例变量,可以使用decodeObjectForKey方法解码实例变量。即指定读取文件中哪个东西变成属性。例如:

-(id)initWithCoder:NSCoder *)decoder

{

if(self = [super init]){

  _name = [decoder decodeObjectForKey:@”name”];

}

return self;

}

2、归档NSArray

归档一个NSArray对象到Documents/array.archive:

其中扩展名可以任意写,不写也可以。

NSArray *array = [NSArray arrayWithObjects:@”a”,@”b”,nil];

[NSKeyedArchiver archiveRootObject:array toFile:path];

归档成功将如下图:

3、恢复(解码)NSArray对象

 

4、归档对象的注意

如果父类也遵守了NSCoding协议,请注意:

(1)应该在encodeWithCoder:方法中加上一句

[super encodeWithCode:encode];

确保继承的实例变量也能被编码,即也能被归档

(2)应该在initWithCoder:方法中加上一句

self = [super initWithCoder:decoder];

确保继承的实例变量也能被解码,即也能被恢复

转载于:https://my.oschina.net/u/2448717/blog/499752

你可能感兴趣的文章
C++/OC 混编
查看>>
在Flex3中使用Runtime Shared Library (RSL)
查看>>
Rice Rock
查看>>
unity探索者之protobuf的序列化和反序列化导致unity崩溃的问题研究
查看>>
UVa 10020 - Minimal coverage
查看>>
《深入浅出MFC》系列之消息映射(一)
查看>>
计算机网络第五版(谢希仁)读书笔记(二)
查看>>
Extjs 使用图标字体来美化按钮)
查看>>
《大话设计模式》读书笔记-第12章 外观模式
查看>>
HTML和CSS之CSS(记录二2015.3.30)
查看>>
自己收集比较强大的分页存储过程
查看>>
js高级教程阅读笔记 第四章-变量作用域和内存问题
查看>>
一个疑难杂症 IIS URL区分大小写(FF的自动变换URL问题)?
查看>>
codeforces 830E dp
查看>>
理解TCP三次握手和四次挥手
查看>>
133:The Dole Queue
查看>>
java架构师之路:推荐的15本书
查看>>
RAC基础笔记(2)
查看>>
sum-of-two-integers
查看>>
【转载】好!线性回归的学习讲解
查看>>