IOS学习笔记二十三对象归档(NSKeyedArchiver、NSKeyedUnArchiver、NSCodeing)

1、NSKeyedArchiver、NSKeyedUnArchiver

1)、archiveRootObject:toFile 归档对象到这个路径文件

2)、unarchiveObjectWithFile:从这个路径文件把对象进行恢复

对象归档这里我们可以理解Android里面的序列化,就是把对象保存到文件持久化,Android里面进行持久化的必须实现SerializableParcelable,然后IOS里面持久化必须实现NSCodeing协议,IOS进行持久化操作一般需要NSKeyedArchiver实现

 

 

 

2、NSCodeing协议

1)、initWithCoder:该方法恢复对象

2)、encodeWithCoder:归档该对象

 

 

 

3、测试Demo(把Dictionary和普通对象进行对象归档)

IApple.h

#import <Foundation/Foundation.h>
#ifndef IApple_h
#define IApple_h
@interface IApple : NSObject <NSCoding>
@property (nonatomic, copy) NSString *color;
@property (nonatomic, assign) double weight;
@property (nonatomic, assign) int size;
-(id)initWithColor:(NSString *) color weight:(double) weight size:(int) size;
@end#endif /* IApple_h */

 

IApple.m

#import  "IApple.h"
#import <Foundation/Foundation.h>
@implementation IApple
@synthesize color = _color;
@synthesize weight = _weight;
@synthesize size = _size;
-(id)initWithColor:(NSString *) color weight:(double) weight size:(int) size
{if (self = [super init]){self.color = color;self.weight = weight;self.size = size;}return self;
}
-(NSString *)description
{return [NSString stringWithFormat:@"<IApple [color = %@, weight = %g, _size = %d]>", self.color, self.weight, self.size];
}-(void)encodeWithCoder:(NSCoder *)aCoder
{[aCoder encodeObject:_color forKey:@"color"];[aCoder encodeDouble:_weight forKey:@"weight"];[aCoder encodeInt:_size forKey:@"size"];
}
-(id) initWithCoder:(NSCoder *)aDecoder
{_color = [aDecoder decodeObjectForKey:@"color"];_weight = [aDecoder decodeDoubleForKey:@"weight"];_size = [aDecoder decodeIntForKey:@"size"];return self;
}@end

 

main.m

#import "IApple.h"
int main(int argc, char * argv[]) {@autoreleasepool {//在document目录下创建一个chenyu.txt空文件NSArray *docPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *path = [docPaths objectAtIndex:0];NSLog(@"document path:%@", path);NSFileManager *fileManager = [NSFileManager defaultManager];NSString *chenyuPath = [path stringByAppendingPathComponent:@"chenyu.txt"];BOOL isSuccess = [fileManager createFileAtPath:chenyuPath contents:nil attributes:nil];if (isSuccess) {NSLog(@"make chenyu.txt success");} else {NSLog(@"make chenyu.txt fail");}//用NSKeyedArchiver进行对象归档NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:10], @"oc", [NSNumber numberWithInt:20], @"java", [NSNumber numberWithInt:30], @"c++", nil];[NSKeyedArchiver archiveRootObject:dic toFile:chenyuPath];NSLog(@"123");//利用NSKeyedUnarchiver进行恢复对象NSDictionary *dic1 = [NSKeyedUnarchiver unarchiveObjectWithFile:chenyuPath];NSLog(@"oc value is %@", [dic1 valueForKey:@"oc"]);NSLog(@"java value is %@", [dic1 valueForKey:@"java"]);NSLog(@"c++ value is %@", [dic1 valueForKey:@"c++"]);//我们先看下chenyu.txt是什么文件,我们用file命令看下 file chenyu.txt,发现是二进制文件
//        file chenyu.txt
//        chenyu.txt: Apple binary property list//下面为chenyu.txt文件的内容,我是用vim打开的
//   bplist00Ô^A^B^C^D^E^F^Z^[X$versionX$objectsY$archiverT$top^R^@^A<86> ¥^G^H^Q^R^SU$nullÓ
//            ^K^L^N^PWNS.keysZNS.objectsV$class¡^M<80>^B¡^O<80>^C<80>^DRoc^P Ò^T^U^V^WZ$classnameX$classes\NSDictionary¢^X^Y\NSDictionaryXNSObject_^P^ONSKeyedArchiverÑ^\^]Troot<80>^A^H^Q^Z#-27=CJR]dfhjlnqsx<83><8c><99><9c>©²ÄÇÌ^@^@^@^@^@^@^A^A^@^@^@^@^@^@^@^^^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@Î//我们再用chenyu.txt归档IApple对象IApple *apple = [[IApple alloc] initWithColor:@"red" weight:5.6 size:20];IApple *apple1 = [[IApple alloc] initWithColor:@"wihte" weight:6.6 size:30];//用NSKeyedArchiver进行IApple对象归档[NSKeyedArchiver archiveRootObject:apple toFile:chenyuPath];[NSKeyedArchiver archiveRootObject:apple1 toFile:chenyuPath];IApple *saveApple = [NSKeyedUnarchiver unarchiveObjectWithFile:chenyuPath];NSLog(@"saveApple is %@", saveApple);}
}

 

 

 

 

 

4、运行结果

2018-07-22 00:08:57.804831+0800 cyTest[37026:15851965] document path:/Users/ls/Library/Developer/CoreSimulator/Devices/3FF9B833-FAF8-4C30-A855-3D40A4EAE8A6/data/Containers/Data/Application/272166E9-67BC-4E6B-B79A-0FF9DA389D7D/Documents
2018-07-22 00:08:57.810379+0800 cyTest[37026:15851965] make chenyu.txt success
2018-07-22 00:08:57.813994+0800 cyTest[37026:15851965] 123
2018-07-22 00:08:57.815001+0800 cyTest[37026:15851965] oc value is 10
2018-07-22 00:08:57.815228+0800 cyTest[37026:15851965] java value is 20
2018-07-22 00:08:57.815438+0800 cyTest[37026:15851965] c++ value is 30
2018-07-22 00:08:57.822014+0800 cyTest[37026:15851965] saveApple is <IApple [color = wihte, weight = 6.6, _size = 30]>

 

 

5、问题思考

是不是每次只能保持一个对象到文件里面呢?暂时感觉是这样的,后面遇到问题再分析。

 

 

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

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

相关文章

.NET 为大型应用接入 ApplicationStartupManager 启动流程框架

对于大型的应用软件&#xff0c;特别是客户端应用软件&#xff0c;应用启动过程中&#xff0c;需要执行大量的逻辑&#xff0c;包括各个模块的初始化和注册等等逻辑。大型应用软件的启动过程都是非常复杂的&#xff0c;而客户端应用软件是对应用的启动性能有所要求的&#xff0…

6-子查询理解

单行子查询 1.查询工资比200号员工工资高的员工 分析&#xff1a; 比200号员工工资高,首先需要知道的是200号员工的工资,可以通过sql语句 SELECT SALARY FROM HR.EMPLOYEES WHERE EMPLOYEE_ID200;得到 然后需要的是写一条SQL语句:查询工资大于?的数据 SELECT * FROM HR.EMPLOY…

计算机文化教程实验基础知识,《计算机文化基础上机实验教程》孙家启、黄晓梅、刘奎 著_孔网...

《计算机文化基础上机实验教程》是安徽省高等学校“十一五”规划教材——《计算机文化基础教程》的配套实验教材。本教程共安排了19个实验&#xff0c;内容包括计算机基础知识(1个实验)、windows2000中文操作系统(3个实验)、中文文字处理软件Word2000(5个实验)、中文电子表格处…

思科为其核心网络业务增加了订阅服务

据国外媒体报道&#xff0c;思科系统公司的核心网络业务于周二开始进军订阅服务市场&#xff0c;其向大型企业宣布了一系列新的安全和自动化工具。 这个新的“直观网络”代表了思科如何从其旗舰业务中获得收入的重大变化。San Jose公司一直依赖于网络设备的销售&#xff0c;这些…

fpga map测试_一种基于SELECTMAP的可配置且高速的FPGA配置电路及实现方法与流程

本发明属于计算机工程领域&#xff0c;与SoC密切相关。具体涉及一种FPGA配置电路及实现方法。背景技术&#xff1a;随着大数据的发展&#xff0c;计算能力的提升&#xff0c;人工智能近两年迎来了新一轮的爆发。2016年谷歌AlphaGo赢得了围棋大战后&#xff0c;人工智能在产业界…

超全局变量数组get post requerst resver的使用规则

超全局变量数组的概念不同于全局变量&#xff0c;这里我主要说的是用来接收信息用的。其实在以往已经大量使用了首先&#xff1a;get数组&#xff0c;速度较好&#xff0c;但是相对不是很安全。post数组&#xff0c;可以接收大的数据量&#xff0c;较安全&#xff0c;最常用。r…

遥感RS植被指数大全整理

本文整理了遥感中的常见指数及计算方法:植被指数、归一化植被指数、比值植被指数、差值植被指数、土壤调节植被指数、变换的土壤调节植被指数、修整的土壤调节植被指数、正交植被指数、绿度植被指数。 目录 一、VI - Vegetation Index - 植被指数 二、NDVI - Normalized Dif…

if函数python_pythonif函数

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01; python的内置的函数round() a 1.12586 #保留小数的函数,四舍五入&#xff0c;参数为保留小数点后的位数 pr…

IOS学习笔记二十四(NSData归档多个对象和归档对象实现深复制)

1、NSData归档多个对象 一、之前我写的学习笔记都是归档一个对象&#xff0c;如果需要归档多个对象我们需要借助NSData 二、步骤 1&#xff09;、NSMutableData作为参数&#xff0c;构建 NSKeyedArchiver对象 2&#xff09;、调用NSKeyedArchiver的encodeXXX 3)、调用NSKeyed…

Android渠道包自动化验证

随着产品发布越来越快&#xff0c;渠道包越来越多&#xff0c;渠道包自动化验证重要性逐渐凸显出来&#xff0c;需要将大把的人力从中解放出来&#xff0c;且避免人工失误造成的验证不完全&#xff1b;最近客户端产品尝试使用渠道包自动化测试的方法&#xff0c;这里说说我们目…

Foundatio - .Net Core用于构建分布式应用程序的可插拔基础块

简介Foundatio - 用于构建分布式应用程序的可插拔基础块•想要针对抽象接口进行构建&#xff0c;以便我们可以轻松更改实现。希望这些块对依赖注入友好。•缓存&#xff1a;我们最初使用的是开源 Redis 缓存客户端&#xff0c;但后来它变成了具有高许可成本的商业产品。不仅如此…

JQuery 判断滚动条是否到底部

1 BottomJumpPage: function () {2 var scrollTop $(this).scrollTop();3 var scrollHeight $(document).height();4 var windowHeight $(this).height();5 if (scrollTop windowHeight scrollHeight) { //滚动到底部执…

开讲啦观后感2017计算机科学家,开讲啦观后感2017

1 开讲啦观后感2017(一)是因为有爱&#xff0c;我才付出的&#xff0c;因为是我爱的&#xff0c;而我又付出了&#xff0c;所以我会更爱。这是郑教授的演讲《你为什么读大学》中给我映像最深刻的一句话。我也能从这句话中找到我读大学的原因因为我爱。古时候说你十年寒窗苦读&a…

ENVI IDL读写数据

最近写程序不知道怎么写envi标准格式文件的头文件&#xff0c;在网上搜了半天&#xff0c;也没找到相关的信息。找到一个 ENVI_SETUP_HEAD函数&#xff0c;也不知怎么用。下面的内容可能以后用的着&#xff0c;先留着吧。 引用自&#xff1a;http://bbs.esrichina-bj.cn/ESRI/v…

php 解压zip

2019独角兽企业重金招聘Python工程师标准>>> /*** 解压zip* param type $file* param type $destination* return boolean*/public function unzip_file($file, $destination){ $zip new ZipArchive() ; if ($zip->open($file) ! TRUE) {return $this->error…

python是偏向bs还是cs_CS与BS架构区别、比较、及现状与趋势分析

一、简介CS即Client/Server(客户机/服务器)结构&#xff0c;C/S结构在技术上很成熟&#xff0c;它的主要特点是交互性强、具有安全的存取模式、网络通信量低、响应速度快、利于处理大量数据。但是该结构的程序是针对性开发&#xff0c;变更不够灵活&#xff0c;维护和管理的难度…

python数据分析软件_Python数据分析工具

Numpy Python没有提供数组功能&#xff0c;虽然列表可以完成基本的数组功能&#xff0c;但他不是真正的数组。Numpy内置函数处理速度是c语言级别&#xff0c;因此尽量使用内置函数&#xff0c;避免出现效率瓶颈的现象。 Numpy的安装&#xff1a; Windows中&#xff0c;pip inst…

Java之TimeUnit

1、TimeUnit介绍 位于这个包下 import java.util.concurrent.TimeUnit; 2、使用 一般比如多少分钟转多少毫秒、多少秒转多少毫秒、多少小时转多少分钟&#xff0c;还可以使用线程休息的方法&#xff0c; 底层还是用Thread.sleep()实现&#xff0c;代码可读性好点&#xff0c…

如何评价国内SRC纷纷上线“白帽子协议”?

2017年6月1日21:21分 某监狱里&#xff0c;对话如下&#xff1a; 犯人A:你们都是怎么来的&#xff1f; 犯人B:我是XX漏洞平台挖漏洞不小心进来的。 犯人C:我是XX平台路人甲&#xff0c;输错命令了rm -rf / &#xff08;批量删除&#xff09; 犯人D:我是某测评中心的忘了要授权了…

SQL Server数据库备份的镜像

SQL Server数据库备份的镜像 原文:SQL Server数据库备份的镜像SQL Server数据库备份的镜像 一个完整备份可以分开镜像 USE master GOBACKUP DATABASE [testdatabase] TO DISK NC:\testdatabase1.bak MIRROR TO DISK ND:\testdatabase2.bak WITH FORMAT, INIT GO 一个完整备份…