博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
归档与解归档
阅读量:4073 次
发布时间:2019-05-25

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

5、对象的归档

概念:对象归档是指将对象写入文件保存在硬盘上,当再次重新打开程序时,可以还原这些对象。亦可以称作对象序列号,对象持久化

5.1数据持久化的方式

NSKeyedArchiver---对象归档

NSUserDefaults

属性列表化(NSArray,NSDictionary保存文件)

SQLite数据库,CoreData

5.2 归档的形式

对Foundation库对象进行归档
自定义对象进行归档(需要实现归档协议,NSCoding)
归档后的文件是加密的,属性列表是明文的
//归档 (序列化)   编码
    NSString*homeDirectory  = NSHomeDirectory();
    NSArray *array5 = @[@123,@456,@"999",@"000"];
    NSString*filePath = [homeDirectory stringByAppendingPathComponent:@"array.archive"];
    if ([NSKeyedArchiver archiveRootObject:array5 toFile:filePath]) {
        NSLog(@"archiver success");
    }
    //解归档(反序列化) 解码
    NSArray*unArray = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
    NSLog(@"new Array:%@",unArray);
6 自定义内容归档
    6.1 归档
使用NSData实例作为归档的存储数据
添加归档的内容 (设置key和value)
完成归档
将归档数据存入磁盘中
  6.2 解归档
从磁盘读取数据,生成NSData实例
根据Data实例创建和初始化归档实例
解归档,根据key访问value的值
//    archiver 压缩程式
    //自定义内容归档
    //归档  序列化  编码
    NSString*homePath = NSHomeDirectory();
    NSString*customfilePath= [homePath stringByAppendingPathComponent:@"customContent.archive"];
    NSMutableData*data = [NSMutableData data];
    NSKeyedArchiver*archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    [archiver encodeFloat:50.0 forKey:@"weight"];
    [archiver encodeObject:@"Tim" forKey:@"name"];
    [archiver finishEncoding];
    [archiver release];
    [data writeToFile:customfilePath atomically:YES];
   
//    解归档
    //读取归档数据
    NSData*content = [NSData dataWithContentsOfFile:customfilePath];
    NSLog(@"%@",content);
    //解归档
    NSKeyedUnarchiver*unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:content];
    //解归档数据
    float weight = [unarchiver decodeFloatForKey:@"weight"];
    NSString*name = [unarchiver decodeObjectForKey:@"name"];
    NSLog(@"-----%f-------%@",weight,name);
7 自定义对象的归档基本概念
  对象要支持归档,需要实现NSCoding协议
  NSCoding协议有两个方法,encodeWithCoder方法对对象的属性数据做编码处理,initWithCoder解码归档数据来初始化对象
     实现NSCoding协议后,就能通过NSKeyedArchiver归档.
//编码  obj----> data
- (void)encodeWithCoder:(NSCoder *)aCoder
{
//  <NSKeyedArchiver: 0x8e7c160> 
    NSLog(@"这是一个编码的方法,作用就是对当前类的属性进行一一编码--%@",aCoder);
   
//  对属性进行编码
    [aCoder encodeObject:_nameStr forKey:KEY_NAME];
    [aCoder encodeObject:_phoneStr forKey:KEY_PHONE];
}
//解码 data---> obj
- (id)initWithCoder:(NSCoder *)aDecoder
{
//  <NSKeyedUnarchiver: 0x8f4e910>
    NSLog(@"这是一个解码的方法,作用就是对保存在NSCoder对象中编过码的数据进行解码,在一一的赋值给当前类的属性。--- %@",aDecoder);
    self = [super init];
    if (self)
    {
//      这里的获得的解码过后的对象,用当前的属性保存,要使用self.
        self.nameStr = [aDecoder decodeObjectForKey:KEY_NAME];
        self.phoneStr = [aDecoder decodeObjectForKey:KEY_PHONE];
    }
    return self;
}

转载地址:http://geyni.baihongyu.com/

你可能感兴趣的文章
xorg.conf的编写
查看>>
启用SELinux时遇到的问题
查看>>
virbr0 虚拟网卡卸载方法
查看>>
No devices detected. Fatal server error: no screens found
查看>>
新版本的linux如何生成xorg.conf
查看>>
virbr0 虚拟网卡卸载方法
查看>>
Centos 6.0_x86-64 终于成功安装官方显卡驱动
查看>>
Linux基础教程:CentOS卸载KDE桌面
查看>>
db sql montior
查看>>
read humor_campus
查看>>
IBM WebSphere Commerce Analyzer
查看>>
Unix + OS IBM Aix FTP / wu-ftp / proftp
查看>>
my read work
查看>>
db db2 base / instance database tablespace container
查看>>
hd disk / disk raid / disk io / iops / iostat / iowait / iotop / iometer
查看>>
project ASP.NET
查看>>
db db2_monitorTool IBM Rational Performace Tester
查看>>
OS + Unix Aix telnet
查看>>
IBM Lotus
查看>>
Linux +Win LAMPP Tools XAMPP 1.7.3 / 5.6.3
查看>>