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、问题思考

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

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

  1. 立创eda学习笔记二十三:如何将原理图和焊盘关联?(交叉选择)

    这是我在网上看到的一个提问,我对这个提问有两个理解, 1,如何显示原理图符号和PCB封装之间的对应位置关系? 那么可以使用以下的交叉选择功能. 这个功能是用来跳转原理图符号和PCB封装之间的对应位置. ...

  2. python学习笔记(二十三) -- 多进程和多线程

    目录 多线程多进程的意义 多进程的使用 方式一(fork):  只能在Unix/Linux/Mac系统下执行,windows不可以 方式二(multiprocessing.Process): 全平台通 ...

  3. Mr.J-- jQuery学习笔记(二十三)--applycall

    之前在学习JavaScript的时候写的:Mr.J--JS学习(继承模式发展史)里面写了我对原生JS call和apply的理解,以及原型链的应用:prototype apply&call J ...

  4. Java学习笔记(二十三)日志体系(logback)

    Java日志体系(logback) logback 简介 师出同门,与log4j一样,logback也是由Ceki Gülcü开发的开源日志组件,可以说是log4j的改进版:在现如今的项目中,logb ...

  5. iOS学习笔记(十三)——获取手机信息(UIDevice、NSBundle、NSLocale)

    2019独角兽企业重金招聘Python工程师标准>>> iOS的APP的应用开发的过程中,有时为了bug跟踪或者获取用反馈的需要自动收集用户设备.系统信息.应用信息等等,这些信息方便 ...

  6. 《COM原理与应用》学习笔记二——COM对象和COM接口的实现

    COM对象是给用户提供服务的封装的实体.这个应该和C++中类的对象理解起来是相似的.但是有时候也把COM对象当作提供服务的那个类.COM对象也对数据进行了封装,然后也提供了接口.不过和类还是有一些不一 ...

  7. IOS学习笔记二十一(NSDictionary、NSMutableDictionary)

    1.NSDictionary.NSMutableDictionary 可以理解为java里面的map,一个key对应一个value,key不可以重复 NSDictionary不可变,NSMutable ...

  8. IOS学习笔记二十NSSet和NSMutableSet

    1.NSSet.NSMutableSet NSSet元素无序.不能重复 NSMutableSet元素无序.不能重复,有一些向集合中增加元素的功能.删除元素....... 2.测试Demo int ma ...

  9. Polyworks脚本开发学习笔记(二)-TREEVIEW基本操作

    Polyworks脚本开发学习笔记(二)-TREEVIEW对象基本操作 TREEVIEW对象选择 选择/不选对象 TREEVIEW OBJECT SELECT ALL 全部对象选择,包括参考/数据/对 ...

最新文章

  1. tomcat环境配置
  2. CYPRESS USB芯片win10驱动
  3. CAS教程-第一篇-CAS单点登录原理解析
  4. QT的QHoverEvent类的使用
  5. JAVA的rotate怎么用,java如何利用rotate旋转图片_如何在Java中旋转图形
  6. 是什么样的骚操作让应用上线节省90%的时间 1
  7. Websocket实现前后台通信,demo小测试
  8. ListView 条目加载上滑下滑首尾缩放动画实现
  9. Jmeter七、jmeter中的参数化
  10. 判断客户端是否安装FlashPlayer及版本
  11. 台式计算机 如何组装,如何自行组装台式计算机?组装台式计算机主机的教程...
  12. DNS之BIND使用小结(Forward转发)
  13. 笔记本如何解除锁定计算机,笔记本键盘锁定解锁方法教程
  14. SpringBoot笔记(五)Linux系统与项目部署
  15. 华为电脑linux怎么切换输入法,华为平板键盘怎么切换中文输入法
  16. 【翻译】配置RSVP-signaled LSP
  17. EXCEL 删除表格内的空格和空白字符
  18. 无法打开csproj,因为此版本的应用程序不支持其项目类型 csproj
  19. 给编程入门者的唠叨话(全栈路线)
  20. excel 宏命令 VB 批量删除word表格的指定行

热门文章

  1. 关于async和await的探讨
  2. 与您相约.NET Conf China 2020! 新进2位重磅嘉宾
  3. 接口幂等设计探索实践
  4. IO 模型知多少 | 代码篇
  5. 给 ABP vNext 应用安装私信模块
  6. 微服务探索与实践—服务注册与发现
  7. 知乎个人精选 | 绝版的专业书到哪里找最快最高效?
  8. Docker最全教程之Go实战,墙裂推荐(十九)
  9. .NET Core开源行动:一键创建Excel Add-in
  10. asp.net core2.2 多用户验证和授权