前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

归档

作者头像
用户1941540
发布2018-05-11 13:43:29
1.2K0
发布2018-05-11 13:43:29
举报
文章被收录于专栏:ShaoYL

归档

基本概念

- 对象归档是指将对象写入文件保存在硬盘上,当再次重新打开程序时,可以还原这些对象。你也可以称他为对象序列化,对象持久化。

  • 数据持久性的方式
    • NSKeyedArchiver --- 对象归档
    • NSUserDefaults
    • 属性列表化(NSArray、NSDictionary保存文件)
    • SQlite数据库、Core Data数据库
  • 归档的形式
    • 对Foundation库中对象进行归档
    • 自定义对象进行归档(需要实现归档协议,NSCoding)
  • 归档后的文件是加密的,属性列表是明文的。属性列表也不能对自定义对象进行保存。

示例

  • 归档(序列化)
代码语言:javascript
复制
//对数组进行归档,归档文件名为temparray 后缀名可以任意

NSString *homeDirectory = NSHomeDirectory();

NSArray *array = @[@123,@234,@"abc",@"hello"];

NSString *filepath = [homeDirectory stringByAppendingPathComponent:@"temparray.adsf"];

if([NSKeyedArchiver archiveRootObject:array toFile:filepath])

{

    NSLog(@"归档成功");

}
  • 解归档(反序列化
代码语言:javascript
复制
//解密刚刚的归档内容

NSString *homeDirectory = NSHomeDirectory();

NSString *filepath = [homeDirectory stringByAppendingPathComponent:@"temparray.adsf"];

NSArray *unArray = [NSKeyedUnarchiver unarchiveObjectWithFile:filepath];

NSLog(@"解归档内容 %@",unArray);

自定义内容归档示例

  • 归档
    • 使用 NSData 实例作为归档的存储数据
    • 添加归档的内容(设置key与value)
    • 完成归档
    • 将归档数据存入磁盘中
  • 解归档
    • 从磁盘读取文件,生成 NSData 实例
    • 根据 Data 实例创建和初始化解归档实例
    • 解归档,根据key 访问 value 的值
  • 代码实例
    • 归档
代码语言:javascript
复制
NSString *homeDirectory = NSHomeDirectory();

NSString *directoryA = [homeDirectory stringByAppendingPathComponent:@"data.archive"];

//自定义归档

NSMutableData *data = [NSMutableData data];

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

[archiver encodeFloat:50 forKey:@"weight"];

[archiver encodeObject:@"jack" forKey:@"name"];

[archiver finishEncoding];

[data writeToFile:directoryA atomically:YES];

NSString *homeDirectory = NSHomeDirectory();

NSString *directoryA = [homeDirectory stringByAppendingPathComponent:@"data.archive"];
  • 解归档
代码语言:javascript
复制
//解归档

 NSData *data = [NSData dataWithContentsOfFile:directoryA];

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

 float weight = [unarchiver decodeFloatForKey:@"weight"];

 NSString *name = [unarchiver decodeObjectForKey:@"name"];

 NSLog(@"weight is %f",weight);

 NSLog(@"name is %@", name);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-06-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档