OC-归档和解归档

  1 //归档:将对象数据存储到文件的过程  NSArchiver
  2 //反归档:从文件中读取数据到对象中的过程
  3 
  4 int main(int argc, const char * argv[]) {
  5     @autoreleasepool {
  6         
  7 #if 0
  8         //使用系统的方法进行归档  NSArchiver
  9         NSDictionary *mutDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"111",@"one",@"222",@"two", nil];
 10         [mutDic setValue:[NSDate date] forKey:@"date"];
 11         [mutDic setValue:[NSNumber numberWithInteger:8889] forKey:@"num"];
 12         [mutDic setValue:[@"ios" dataUsingEncoding:NSUTF8StringEncoding] forKey:@"data"];
 13         
 14         BOOL flag = [NSArchiver archiveRootObject:mutDic toFile:@"/Users/qianfeng/Desktop/day21-OC11_时间类/day21_OC11_归档与反归档/arch.txt"];
 15         if (flag) {
 16             NSLog(@"文件归档成功");
 17         }else{
 18             NSLog(@"文件归档失败");
 19         }
 20 
 21 #endif
 22         
 23 #if 0
 24         //使用系统进行反归档  NSUnarchiver
 25         NSDictionary *dict1 = [NSUnarchiver unarchiveObjectWithFile:@"/Users/qianfeng/Desktop/day21-OC11_时间类/day21_OC11_归档与反归档/arch.txt"];
 26         if (dict1) {
 27             NSLog(@"dict = %@",dict1);
 28         }
 29 #endif
 30 
 31 //#if 0
 32         //使用系统的方法进行归档  NSKeyedArchiver
 33         NSDictionary *mutDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"111",@"one",@"222",@"two", nil];
 34         [mutDic setValue:[NSDate date] forKey:@"date"];
 35         [mutDic setValue:[NSNumber numberWithInteger:8889] forKey:@"num"];
 36         [mutDic setValue:[@"ios" dataUsingEncoding:NSUTF8StringEncoding] forKey:@"data"];
 37         
 38         NSData *data = [NSKeyedArchiver archivedDataWithRootObject:mutDic];
 39         BOOL ret = [data writeToFile:@"/Users/qianfeng/Desktop/day21-OC11_json_归档和解归档类/day21_OC11_归档与反归档/lpj.plist" atomically:YES];
 40         if (ret) {
 41             NSLog(@"归档成功");
 42         }
 43         else{
 44             NSLog(@"归档失败");
 45         }
 46      
 47 //#endif
 48         
 49 #if 0
 50         //解归档
 51         NSData *data = [NSData dataWithContentsOfFile:@"/Users/qianfeng/Desktop/day21-OC11_json_归档和解归档类/day21_OC11_归档与反归档/lpj.plist"];
 52        //NSDictionary *dict = [NSKeyedUnarchiver unarchiveObjectWithFile:@"/Users/qianfeng/Desktop/day21-OC11_时间类/day21_OC11_归档与反归档/data.txt"];
 53         NSDictionary *dict = [NSKeyedUnarchiver unarchiveObjectWithData:data];
 54         if (dict) {
 55             NSLog(@"解归档成功");
 56             NSLog(@"%@",dict);
 57         }else{
 58             NSLog(@"解归档失败");
 59             
 60         }
 61 #endif
 62         
 63 #if 0
 64         //  NSSearchPathForDirectoriesInDomains 这个主要就是返回一个绝对路径用来存放我们需要储存的文件。
 65         NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
 66         NSString *documentsDirectory = [paths objectAtIndex:0];
 67         NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:@"shoppingCar.plist"];
 68 #endif
 69         
 70         
 71     }
 72     
 73     
 74     @autoreleasepool {
 75         
 76 #if 0
 77         
 78         //手动归档 - (instancetype)initForWritingWithMutableData:(NSMutableData *)data;
 79         
 80         //创建一个可变的数据对象
 81         NSMutableData *mulData = [[NSMutableData alloc] init];
 82         
 83         
 84         NSKeyedArchiver *keyArchiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:mulData];
 85         //数组对象
 86         NSArray *array = [NSArray arrayWithObjects:@"one",[NSNumber numberWithInteger:1111],[NSDate date],[@"i love ios" dataUsingEncoding:NSUTF8StringEncoding], nil];
 87         //字典对象
 88         NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"111",@"one",array,@"array",[NSNumber numberWithInt:1212],@"num",[NSDate date],@"date", nil];
 89         
 90         //对数组和字典进行编码 原理:其实是是将数组array和字典dict对象写入到可变数据对象mulData中。之后在利用muData的writeToFile将二进制数据写入到文档中
 91         [keyArchiver encodeObject:array forKey:@"array"];
 92         [keyArchiver encodeObject:dict forKey:@"dict"];
 93         
 94         //编码结束一定需要调用finishEncoding方法
 95         [keyArchiver finishEncoding];
 96         
 97         //写入文件
 98         BOOL flag = [mulData writeToFile:@"/Users/qianfeng/Desktop/day21-OC11_时间类/day21_OC11_归档与反归档/initForWritingWithMutableData.txt" atomically:YES];
 99         if (flag) {
100             NSLog(@"归档成功");
101         }else{
102             NSLog(@"归档失败");
103         }
104         
105 #endif
106         
107 #if 0
108         //手动解归档
109         //过程 1.首先创建一个NSData对象,并读取文件的内容  2.通过NSKeyedUnarchiver 的 initForReadingWithData方法从数据对象中解归档对象  3.通过关键字从解归档对象中获取数组对象和字典对象
110         NSData *data = [NSData dataWithContentsOfFile:@"/Users/qianfeng/Desktop/day21-OC11_时间类/day21_OC11_归档与反归档/initForWritingWithMutableData.txt"];
111         NSKeyedUnarchiver *keyUnarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
112         
113         //通过关键字 解码数组
114         NSArray *array = [keyUnarchiver decodeObjectForKey:@"array"];
115         //通过关键字 解码字典
116         NSDictionary *dict = [keyUnarchiver decodeObjectForKey:@"dict"];
117         
118         [keyUnarchiver finishDecoding];
119         
120         NSLog(@"array = %@",array);
121         NSLog(@"dict = %@",dict);
122         
123 #endif
124     }
125     return 0;
126 }

归档:将程序中的对象写入到文件的过程

解归档:将文件中的数据读取为程序中的对象的过程

转载于:https://www.cnblogs.com/BeyondAverage0908/p/4596798.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐电影 奥黛丽赫本的十大经典电影 1953-1989

奥黛丽赫本的十部经典电影 1.《罗马假日》 (Roman Holiday,1953) 导演:威廉惠勒 风情指数★★★★★ 看点:奥黛丽赫本和格里高利派克的完美组合 如果没有奥黛丽赫本,或许《罗马假日》只会作为一部平庸…

C和C++之用extern “C“实现它们之间的互调

1、extern "C"的解释 一个C++程序包含其它语言编写的部分代码。C++编写的代码片段可能被使用在其它语言编写的代码中,不同语言编写的代码互相调用是困难的,甚至是同一种编写的代码但不同的编译器编译的代码。例如,不同语言和同种语言的不同实现可能会在注册变…

ASP.NET Core基于滑动窗口算法实现限流控制

前言在实际项目中,为了保障服务器的稳定运行,需要对接口的可访问频次进行限流控制,避免因客户端频繁请求导致服务器压力过大。而AspNetCoreRateLimit[1]是目前ASP.NET Core下最常用的限流解决方案。查看它的实现代码,我发现它使用…

android 资源文件获取啥退,重拾Android之路之获得各种资源文件的方法

引言通常我们会在项目中频繁获取color、raw、drawable、mipmap、string等资源文件。因此,今天整理下获取资源文件的工具类方法。最新通用方法ContextCompat.getColor(this,R.color.activity_bg);ContextCompat.getDrawable(this,R.drawable.leak_canary_icon);最近在…

linux操作系统cp命令

转载于:https://www.cnblogs.com/skl374199080/p/3863918.html

WPF将数据库和GridView绑定并更改GridView模板

首先来看一下如何使用GridView,在前台的话代码如下&#xff1a;这里仅仅举出一个例子&#xff0c;GridView是作为子项嵌套在ListView中的&#xff0c;这里的数据源是通过绑定的方式来绑定到GridView中的。 <ListView Margin"15,115,15,48" Name"lstProducts&…

sql必读的九本书

2019独角兽企业重金招聘Python工程师标准>>> 原文地址 直接上书(书籍以后会陆续加上去)书籍下载地址 《MySQL必知必会》《SQL学习指南&#xff08;第2版 修订版&#xff09;》《MySQL技术内幕——InnoDB存储引擎》《Redis设计与实现》《ZooKeeper&#xff1a;分布式…

C语言之加入头文件<stdbool.h>可以使用true和false

1、头文件<stdbool.h>介绍 &#xff08;1&#xff09;使用了<stdbool.h>后&#xff0c;可使用true和false来表示真假。 &#xff08;2&#xff09;在循环语句中进行变量声明是C99中才有的&#xff0c;因此编译时显式指明 gcc -stdc99 prime.c 2、最简单的例子 3、…

Nginx负载均衡+转发策略

负载均衡负载均衡(详解)https://cloud.tencent.com/developer/article/1526664--示例1upstream www_server_pool { server 10.0.0.5; server 10.0.0.6&#xff1a;80 weight1 max_fails1 fails_timeout10s; server 10.0.0.7&#xff1a;80 weight1 max_fails2 fails_timeo…

ftp 断点续传 Android,Android使用FTP实现断点续传

Android使用FTP实现断点续传断点续传指的是在下载或上传时&#xff0c;将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分&#xff0c;每一个部分采用一个线程进行上传或下载&#xff0c;如果碰到网络故障&#xff0c;可以从已经上传或下载的部分开始继续上传下载未…

教育行业的互联网焦虑症

2019独角兽企业重金招聘Python工程师标准>>> 文/阑夕 2007年&#xff0c;前新东方名师刘一男在新东方在线&#xff08;网校&#xff09;上的全年课程收入是三千元&#xff0c;四年之后的2011年&#xff0c;这个数字飙升到了四十万&#xff0c;已经和刘一男当年实体…

常见的几种RuntimeException

一般面试中java Exception&#xff08;runtimeException &#xff09;是必会被问到的问题常见的异常列出四五种&#xff0c;是基本要求。更多的。。。。需要注意积累了常见的几种如下&#xff1a;NullPointerException - 空指针引用异常ClassCastException - 类型强制转换异常。…

Android之Error: ‘L‘ is not a valid file-based resource name character解决办法

1、问题 Error:Execution failed for task :mergeBYODReleaseResources.> /home/chenyu/Android_dev/sangfor/yangzhoushizhenghu/20161229_M7.3_R3/EMM/Source/Android/aWork/res/drawable-mdpi/LOGO.png: Error: L is not a valid file-based resource name character: Fi…

零基础学人工智能:TensorFlow 入门例子

识别手写图片 因为这个例子是 TensorFlow 官方的例子&#xff0c;不会说的太详细&#xff0c;会加入了一点个人的理解&#xff0c;因为TensorFlow提供了各种工具和库&#xff0c;帮助开发人员构建和训练基于神经网络的模型。TensorFlow 中最重要的概念是张量&#xff08;Tenso…

TextView 多文字字体颜色及多事件监听

像微信朋友圈点赞功能如&#xff1a;张三、李四、王五、这种格式 最早做法是在layout中创建一个父类容器如linearlayout然后在创建一个子layout&#xff0c;在代码中 通过for循环addView添加到父类容器当中&#xff0c;虽然可以实现效果但是这样无形中会增加很多view控件。 通过…

CA周记 - 用 Visual Studio Code 做基于 .NET MAUI 跨平台移动应用开发

自2010年以来&#xff0c;移动应用开发是非常热门的一个方向&#xff0c;从技术上我们经历了原生应用开发、基于 H5 的 Web App、混合模式的移动应用开发&#xff0c;再到跨平台移动应用开发。.NET 不仅是一个跨平台的应用&#xff0c;也是一个跨应用场景的平台。.NET的移动应用…

P2P网络穿越 NAT穿越

http://blog.csdn.net/mazidao2008/article/details/4933730 —————————————————————————————————————————————————————————————— 穿越NAT的意义&#xff1a; NAT是为了节省IP地址而设计的&#xff0c;但它隐藏了…

Eclipse之如何快速查看抽象函数实现

1、ctrl (open implementation) 2、ctrl T

页面获取Spring Security登录用户

1.在session中取得spring security的登录用户名如下&#xff1a;${session.SPRING_SECURITY_CONTEXT.authentication.principal.username} spring security 把SPRING_SECURITY_CONTEXT 放入了session 没有直接把username 放进去。下面一段代码主要描述的是session中的存的变量&…

android 骨骼动画库,cocos creator spine骨骼动画组件使用

1: 掌握sp.Skeleton组件的使用;spine骨骼动画工具1: 骨骼动画: 把动画打散, 通过工具&#xff0c;调骨骼的运动等来形成动画2: spine是一个非常流行的2D骨骼动画制作工具3: spine 动画美术人员导出3个文件:(1) .png文件:动画的”骨骼”的图片集;(2).atlas文件: 每个骨骼在图片集…