2019独角兽企业重金招聘Python工程师标准>>>

  • 1.比较

在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径;
    NSUserDefaults 偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置信息)

归档:因为前两者都有一个致命的缺陷,只能存储常用的类型。归档可以实现把自定义的对象存放在文件中。

  • 2.归档的使用

Archiving: 归档(写 NSKeyedArchiver )/解档(读NSKeyedUnarchiver): 从内存写到沙盒文件   从沙盒读取到内存中

前提:必须遵守 NSCoding协议才可以归档方式

1.适用场景 :

a。支持基本数据类型

b。自定义类型(比如实例变量、xib也默默的归档)

归档 5步骤,解档 4步骤

a.对基本类型的归档

- (NSString *)archivingFilePath {if (!_archivingFilePath) {NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];_archivingFilePath = [documentsPath stringByAppendingPathComponent:@"archiving"];}return _archivingFilePath;
}
- (IBAction)writeNSArrayByArchiving:(id)sender {//准备数据NSArray *array = @[@"name", @"age"];NSArray *stuArray = @[@"Jonny", @19, @[@"Objective-C", @"Ruby"]];//1.准备存储归档数据的可变数据类型NSMutableData *mutableData = [NSMutableData data];NSLog(@"归档前数据长度:%lu", (unsigned long)mutableData.length);//2.创建NSKeyedArchiver对象 写到mutableData里面NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:mutableData];//3.对要归档的数据进行编码操作(二进制)[archiver encodeObject:array forKey:@"firstArray"];[archiver encodeObject:stuArray forKey:@"secondArray"];//4.完成编码操作[archiver finishEncoding];NSLog(@"归档之后的数据长度:%lu", (unsigned long)mutableData.length);//5.将编码后的数据写到文件中[mutableData writeToFile:self.archivingFilePath atomically:YES];}- (IBAction)readDataByUnarchiving:(id)sender {//1.从文件中读取数据(NSData)NSData *data = [NSData dataWithContentsOfFile:self.archivingFilePath];//2.创建NSKeyedUnarchiver对象 读取DataNSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];//3.对数据进行解码操作NSArray *firstArray = [unarchiver decodeObjectForKey:@"firstArray"];NSArray *secondArray = [unarchiver decodeObjectForKey:@"secondArray"];//4.完成解码操作[unarchiver finishDecoding];//验证NSLog(@"firstArray:%@; secondArray:%@", firstArray, secondArray);
}

2.对自定义类型的归档

- (void)viewDidLoad {[super viewDidLoad];
//将自定义的类对象进行归档 (写)//1.可变数据NSMutableData* data = [[NSMutableData alloc]init];//2.归档对象Person* person = [[Person alloc]initWithName:@"Jackey" age:@20];//3.编码NSKeyedArchiver* archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];[archiver encodeObject:person forKey:@"person"];
//    4.编码结束[archiver finishEncoding];
//    5.写入文件NSString* docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;NSString* filePath = [docPath stringByAppendingPathComponent:@"archiving"];[data writeToFile:filePath atomically:YES];//    将自定义的类对象进行解档 (读)//1.从文件中读取到数据(NSData)NSData*  readData = [NSData dataWithContentsOfFile:filePath];//2.创建NSKeyedUnarchiver对象NSKeyedUnarchiver* unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:readData];//3.对数据进行解码操作Person* p =  [unarchiver decodeObjectForKey:@"person"];//4.完成解码操作[unarchiver finishDecoding];NSLog(@"person name:%@ --- age:%@",p.name,p.age);}

转载于:https://my.oschina.net/u/2524932/blog/618444

iOS 归档 解档使用总结相关推荐

  1. iOS 归档 解档 unexpected class 问题

    解决 Error Domain=NSCocoaErrorDomain Code=4864 "value for key 'xxx' was of unexpected class 'xxx' ...

  2. 【iOS数据持久化】归档解档(NSKeyedArchiver/ NSKeyedUnarchiver)

    简介 归档(Archive)也称为序列化(serialization),把对象转化为字节码,以文件的形式存储在磁盘上,只要遵循了NSCoding协议的对象都可以实现归档和解档(大部分foundatio ...

  3. IOS 利用运行时机制来进行归档解档

    前言:我们需要对一个类的属性进行归档解档的时候属性特别的多,这时候,我们就会写很多对应的代码,但是如果使用了runtime就可以动态设置,就会变的很轻松! 首先需要导入<objc/runtime ...

  4. iOS 利用归档解档实现类似微博及一些CRM类软件的草稿箱思路

    实际上就是写一个model类 然后将要存数据放到model中,然后将model添加到数组,然后对数组及数组中放的model归档,本地存储起来,解档,拿到数据在需要的地方显示出来 因为model是一个自 ...

  5. 四种数据持久化方式(上) :属性列表与归档解档

    iOS中的永久存储,也就是在关机重新启动设备,或者关闭应用时,不会丢失数据.在实际开发应用时,往往需要持久存储数据的,这样用户才能在对应用进行操作后,再次启动能看到自己更改的结果与痕迹. iOS开发中 ...

  6. 使用偏好设置、属性列表、归档解档保存数据、恢复数据

    数据持久化就是将文件保存到硬盘,以便下次运行时可以读取或永久保存.iOS提供了以下几种持久化方案: NSUserDefaults (偏好设置) property list 即Plist (属性列表) ...

  7. 数据存储之归档解档 NSKeyedArchiver NSKeyedUnarchiver

    在构建应用程序时,有一个重要的问题是如何在每次启动之间持久化数据,以便重现最后一次关闭应用前的状态.在iOS和OS X上,苹果提供了三种选择:Core Data.属性列表(Property List) ...

  8. runtime自动归档/解档

    原文出自:标哥的技术博客 前言 善用runtime,可以解决自动归档解档.想想以前归档是手动写的,确实太麻烦了.现在有了runtime,我们可以做到自动化了.本篇文章旨在学习如何通过runtime实现 ...

  9. iOS 之归档解档(nskeyarchieve)

    iOS 归档的记录 归档是一种很常用的文件储存方法,几乎任何类型的对象都能够被归档储存(实际上是一种文件保存的形式),浏览网上的一些资料后,并结合自己的一些经验,总结成此文. 一.使用archiveR ...

最新文章

  1. 控制编译文件控制代码质量
  2. 借助亚马逊S3和RapidMiner将机器学习应用到文本挖掘
  3. python中文读音ndarray-NumPy与ndarray简介(转)
  4. python web-Web开发
  5. [Linux实用工具]Ubuntu环境下SSH的安装及使用
  6. 数据结构与算法(C++)– 二叉查找树(Binary Search Tree )
  7. 【机器学习基础】机器学习模型的度量选择(下)
  8. DNS攻击的主要方式
  9. ASP.Net中怎样获得存储过程传出的参数。
  10. 平板电脑连接投影仪_苹果电脑如何连接投影仪 苹果Mac连接投影仪方法【详解】...
  11. 抽象同步器AQS应用之--阻塞队列BlockingQueue,如何保证任务一定被消费?
  12. tempdb 数据文件暴涨
  13. Effective C++ -----条款42:了解typename的双重意义
  14. 怎么用计算机画图工具,如何用电脑自带画图工具画平面图
  15. MICROSOFT REPORTVIEWER(微软报表)项目中的应用
  16. 那点房事(难以齿口)
  17. 大华设备播放过程中设置播放速度
  18. html鼠标各种坐标,HTML坐标系与鼠标事件坐标
  19. win10备份为wim_电脑:Win10 专业版提取制作方法
  20. java字符串组合_Java实现abc字符串排列组合

热门文章

  1. Error:The module 'app' is an Android project without build variants, and cannot be built.
  2. 框架源码专题:Spring的事件监听、发布机制 ApplicationListener
  3. linux svn with ad,svn+apache+AD域
  4. Spring Cloud 微服务实战系列-Eureka注册中心(一)
  5. mybatis入门基础(五)----动态SQL
  6. 良好的Makefile实践
  7. 各大公司应聘电子类题目精选
  8. 使用Go语言创建WebSocket服务
  9. Dubbo基础知识总结
  10. springbatch读取外部数据到mysql