iOS 对象的归档

对象归档的定义:

对象归档就是将对象归档以文件的形式保存到磁盘中,使用的时候以该文件保存的路径读取文件中的内容

使用NSKeyedArichiver进行归档、NSKeyedUnarchiver进行接档,这种方式会在写入、读出数据之前对数据进行序列化、反序列化操作。

单对象归档,多个对象归档,自定义对象归档

常用的归档一般用在工具类中,对不可变的数据进行归档,可变的数据不进行归档,用起来更加方便

//1.一个对象归档

NSString *homeDictionary = NSHomeDirectory();//获取根目录

NSString *homePath  = [homeDictionary stringByAppendingPathComponent:@"archiver.data"];//添加储存的文件名

//归档 toFile:路径 archiveRootObject:id对象

[NSKeyedArchiver archiveRootObject:@"对象" toFile:homePath];

//接档

id object = [NSKeyedUnarchiver unarchiveObjectWithFile:homePath];

NSLog(@"%@",object);

//2.将多个对象归档

NSMutableData *data = [NSMutableData data];

//归档

NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];

int aInt = 100;

NSString *aString = @"I is an Apple";

NSDictionary *aDict = @{@"a":@"b",@"c":@"d"};

[archiver encodeObject:@(aInt) forKey:@"aInt"];

[archiver encodeObject:aString forKey:@"aString"];

[archiver encodeObject:aDict forKey:@"aDict"];

[archiver finishEncoding];

NSString *dataHomePath = [NSHomeDirectory() stringByAppendingPathComponent:@"data.archiver"];

[data writeToFile:dataHomePath atomically:YES];

//接档

NSMutableData *muData = [[NSMutableData alloc]initWithContentsOfFile:dataHomePath];

NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:muData];

NSInteger  anInt = [[unarchiver decodeObjectForKey:@"aInt"] integerValue];

NSString *anString = [unarchiver decodeObjectForKey:@"aString"];

NSDictionary *anDict = [unarchiver decodeObjectForKey:@"aDict"];

[unarchiver finishDecoding];

NSLog(@"anInt=%@,anString=%@,anDict=%@",@(anInt),anString,anDict);

//3.自定义对象归档实现copy协议

#import <Foundation/Foundation.h>

@interface ArchiveCopy : NSObject

@property (copy,nonatomic) NSString *name;

@property (copy,nonatomic) NSString *anAge;

end

- (void)encodeWithCoder:(NSCoder *)aCoder{

[aCoder encodeObject:@"name"];

[aCoder encodeObject:@"anAge"];

}

- (id)initWithCoder:(NSCoder *)aDecoder {

if (self = [super init]) {

_name = [aDecoder decodeObjectForKey:@"name"];

_anAge = [aDecoder decodeIntegerForKey:@"anAge"];

}

return self;

}

#pragma mark - NSCoping

- (id)copyWithZone:(NSZone *)zone {

ArchiveCopy *copy = [[[self class] allocWithZone:zone] init];

copy.name = [self.name copyWithZone:zone];

copy.anAge = [self.address copyWithZone:zone];

return copy;

}

时间: 2024-10-05 19:53:08

iOS 对象的归档的相关文章

IOS --- 对象归档

原文:http://blog.sina.com.cn/s/blog_7124765801015imx.html IOS提供的数据持久化方式有:SQLite.CoreData.属性列表.NSUserDefault.对象归档. 这里来简单介绍下对象归档: 对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化),使用的时候读取该文件的保存路径读取文件的内容(也称为接档,反序列化), (对象归档的文件是保密的,在磁盘上无法查看文件中的内容,而属性列表是明文的,可以查看). 对象归档有两种方

iOS 对模型对象进行归档

归档是指一种形式的序列化,专门编写用于保存数据的任何对象都应该支持归档.使用对模型对象进行归档的技术可以轻松将复杂的对象写入文件,然后再从中读取它们. 只要在类中实现的每个属性都是标量或者都是遵循NSCoding协议的某个类的实例,你就可以对整个对象进行完全归档.大多数的Foundation和Cocoa Touch类 都遵NSCoding协议,所以对于有大多数类来说,归档不太难. 遵循NSCoding协议: NSCoding声明了两个方法, - (void)encodeWithCoder:(NS

iOS对象序列化

系统对象的归档我就不介绍了,这个不复杂,自己看一下就会了. 我在这里主要介绍自定义对象的归档. Sample.h文件 9 #import <Foundation/Foundation.h> 10 11 @interface Sample : NSObject<NSCoding> { 12 13 NSString* name; 14 int magicNumber; 15 float shoeSize; 16 NSMutableArray *subThingies; 17 } 18

NSCoding的使用方法---iOS上的归档(增加更改内容的方法).

上一章我们介绍了在iOS上的归档以及解档, 今天我们在归档之后稍微做一些改变, 使得解档之后得到的结果有所不同, 这个方法类似NSMutableXXX, 可修改里面的参数, 下面让我们来看看吧. 涉及的方法: seekToFileOffset:这个方法是寻求方法的偏移, 意思就是在文件中寻找文本里的起点. readDataOfLength:这个方法是指读取文件的长度是多少. offsetInFile:是指写到第几个位置. #import "ViewController.h" #defi

NSCoding的使用方法---iOS上的归档.

在iOS上的归档和在Mac上的归档有些不一样, 在Mac上的归档你可以把文件放在任意的一个文件夹里面, 但是在iOS上, 你所写的文件就只能放在三个文件夹里, 分别是Documents, Library, tmp三个文件, 这里需要注意一下, library和tmp文件会在软件升级, 系统升级或者系统空间不足时会自动清除里面的文件, 只有在Documents文件才可以永久保存, 直到你把软件删除为止. 这里涉及的方法: NSHomeDirectory:这个方法的意思就是获取软件的主目录. str

iOS开发 - 数据归档与恢复 NSKeyedArchiver

归档与恢复归档 归档,英文Archiver['ɑrk?v?],这里指的是将OC的对象存储为一个文件或者网络上的一个数据块. 恢复归档.英文UnArchiver,指的是将一个来自文件或网络的归档数据块恢复成内存中的一个OC对象. 归档和恢复主要用于对自己定义类型对象进行存储.在程序暂停或关闭前保存自己定义数据.在程序又一次恢复状态或启动后读取存储的自己定义数据. 支持归档和恢复的类必须实现NSCoding协议,再由NSKeyedArchiver和NSKeyedUnarchiver类进行转换.将对象

IOS开发之 归档总结

只针对于Foundation对象的归档: 使用XML属性列表归档,结果物为XML文件,属性列表归档只针对于Foundation对象,若数组或字典集合中有某些自定义的类的对象,则不能用这个方法归档. 归档使用的方法: 使用Foundation类中自带的方法:- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile; 相对应的解析方法:-(id)initWithContentOfFile:(NSString *)fi

Pop–实现任意iOS对象的任意属性的动态变化

简介 Pop 是一个可扩展的动画引擎,可用于实现任意iOS对象的任意属性的动态变化,支持一般动画,弹性动画和渐变动画三种类型. 项目主页: pop 最新示例: 点击下载 注意: 官方代码中,并不包含实例,而是用于编译的所有源代码,建议自行新建工程,并结合下文的代码片段查看效果. 入门 安装 通过CocoaPods安装 pod 'pop', '~> 1.0' 使用 在需要使用POP的地方,引入头文件: #import <pop/POP.h> 动画的开始,停止 与 更新 把动画添加到你想要拥

ios对象copy的方法,要实现nscopy协议

ios对象copy的方法,要实现nscopy协议 by 伍雪颖 - (id)copyWithZone:(NSZone *)zone { RestEntity *copy = [[[self class] allocWithZone:zone] init]; copy.dishId = _dishId; return copy; } - (id)mutableCopyWithZone:(NSZone *)zone { RestEntity *copy = [RestEntity allocWith