在这里利用NSKeyedArchiver/unArchiver对自定义的模型进行序列化。在序列化之前要对自定义模式实现NSCoding的2个协议。

NScoding 是一个协议,主要有下面两个方法
-(id)initWithCoder:(NSCoder *)coder;//从coder中读取数据,保存到相应的变量中,即反序列化数据
-(void)encodeWithCoder:(NSCoder *)coder;// 读取实例变量,并把这些数据写到coder中去。序列化数据

NSKeyedUnarchiver   从二进制流读取对象。
NSKeyedArchiver       把对象写到二进制流中去。

Info模型:

Info.h

#import <Foundation/Foundation.h>@interface Info : NSObject<NSCoding>@property(nonatomic, copy)NSString *infoName;
@property(nonatomic, assign)NSInteger infoCount;
@end

Info.m

#import "Info.h"@implementation Info-(id)initWithCoder:(NSCoder *)aDecoder{if (self = [super init]) {self.infoName = [aDecoder decodeObjectForKey:@"infoName"];self.infoCount = [aDecoder decodeIntegerForKey:@"infoCount"];}return self;
}- (void)encodeWithCoder:(NSCoder *)aCoder{[aCoder encodeObject:self.infoName forKey:@"infoName"];[aCoder encodeInteger:self.infoCount forKey:@"infoCount"];
}

User模型:

User.h   //User模型包含Info模型;

#import <Foundation/Foundation.h>
#import "Info.h"@interface User : NSObject<NSCoding>@property(nonatomic, copy)NSString *name;
@property(nonatomic, assign)NSInteger age;
@property(nonatomic, strong)NSArray *friends;
@property(nonatomic, strong)Info *infomation;
@end

User.m

#import "User.h"@implementation User- (id)init{if (self = [super init]) {self.infomation = [[Info alloc] init];}return self;
}-(id)initWithCoder:(NSCoder *)aDecoder{if (self = [super init]) {self.name = [aDecoder decodeObjectForKey:@"name"];self.friends = [aDecoder decodeObjectForKey:@"friends"];self.infomation =[aDecoder decodeObjectForKey:@"infomation"];self.age = [aDecoder decodeIntegerForKey:@"age"];}return self;
}- (void)encodeWithCoder:(NSCoder *)aCoder{[aCoder encodeObject:self.name forKey:@"name"];[aCoder encodeObject:self.friends forKey:@"friends"];[aCoder encodeObject:self.infomation forKey:@"infomation"];[aCoder encodeInteger:self.age forKey:@"age"];
}@end

序列化测试代码:

#pragma mark - 序列化测试;
- (void)serialTest{User *user = [[User alloc] init];user.name = @"zhenjie";user.age = 22;user.friends = @[@"qiang",@"ze"];
//    user.infomation = [[Info alloc] init];user.infomation.infoName = @"my info name";user.infomation.infoCount = 1;User *user1 = [[User alloc] init];user1.name = @"zhenjie1";user1.age = 22;user1.friends = @[@"qiang1",@"ze1"];//    user.infomation = [[Info alloc] init];user1.infomation.infoName = @"my info name1";user1.infomation.infoCount = 2;//模型序列化NSData *data_en = [NSKeyedArchiver archivedDataWithRootObject:user];[[NSUserDefaults standardUserDefaults] setObject:data_en forKey:@"data"];NSData *data_de =[[NSUserDefaults standardUserDefaults] objectForKey:@"data"];User *user_de = [NSKeyedUnarchiver unarchiveObjectWithData:data_de];/*//模型对象数组序列化NSArray *arr_en = @[user, user1];NSData *data_en = [NSKeyedArchiver archivedDataWithRootObject:arr_en];[[NSUserDefaults standardUserDefaults] setObject:data_en forKey:@"data"];NSLog(@"----------------\n");NSData *data_de =[[NSUserDefaults standardUserDefaults] objectForKey:@"data"];NSArray *arr_de = [NSKeyedUnarchiver unarchiveObjectWithData:data_de];NSLog(@"===user_de:%@",arr_en);*/
}

NSKeyedArchiver/unArchiver序列化自定义复合模型(模型包含模型)相关推荐

  1. 探索ASP.NET MVC5系列之~~~4.模型篇---包含模型常用特性和过度提交防御

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  2. 模型训练平台的构建_用5行代码构建自定义训练的对象检测模型

    模型训练平台的构建 如今,机器学习和计算机视觉已成为一种热潮. 我们都已经看到了有关自动驾驶汽车和面部识别的新闻,并且可能想象到建立我们自己的计算机视觉模型将会多么酷. 但是,进入该领域并不总是那么容 ...

  3. 用5行代码构建自定义训练的对象检测模型

    如今,机器学习和计算机视觉已成为一种热潮. 我们都已经看到了有关自动驾驶汽车和面部识别的新闻,并且可能想象到建立我们自己的计算机视觉模型将会多么酷. 但是,进入该领域并不总是那么容易,尤其是在没有扎实 ...

  4. Python使用numpy包编写自定义函数计算平均绝对误差(MAE、Mean Absolute Error)、评估回归模型和时间序列模型、解读MAE

    Python使用numpy包编写自定义函数计算平均绝对误差(MAE.Mean Absolute Error).评估回归模型和时间序列模型.解读MAE 目录

  5. Python使用numpy包编写自定义函数计算均方误差(MSE、mean squared error)、评估回归模型和时间序列模型、解读MSE评估指标

    Python使用numpy包编写自定义函数计算均方误差(MSE.mean squared error).评估回归模型和时间序列模型.解读MSE评估指标 目录

  6. R语言编写自定义函数、评估回归模型预测变量的相对重要性(Relative importance)、通过在所有可能的子模型中添加一个预测变量而获得的R方的平均增加、评估预测变量的重要度、并通过点图可视化

    R语言编写自定义函数.评估回归模型预测变量的相对重要性(Relative importance).通过在所有可能的子模型中添加一个预测变量而获得的R方的平均增加.来评估预测变量的重要程度.并通过点图可 ...

  7. R语言构建logistic回归模型并评估模型:构建基于混淆矩阵计算分类评估指标的自定义函数、阳性样本比例(垃圾邮件比例)变化对应的分类器性能的变化、基于数据阳性样本比例选择合适的分类评估指标

    R语言构建logistic回归模型并评估模型:构建基于混淆矩阵计算分类评估指标的自定义函数.阳性样本比例(垃圾邮件比例)变化对应的分类器性能的变化.基于数据阳性样本比例选择合适的分类评估指标 目录

  8. keras dense sigmoid_tf.keras一个存在自定义层时加载模型时的小坑

    前言 Tensorflow在现在的doc里强推Keras,用过之后感觉真的很爽,搭模型简单,模型结构可打印,瞬间就能train起来不用自己写get_batch和evaluate啥的,跟用原生tenso ...

  9. DL之DNN:自定义2层神经网络TwoLayerNet模型(封装为层级结构)利用MNIST数据集进行训练、预测

    DL之DNN:自定义2层神经网络TwoLayerNet模型(封装为层级结构)利用MNIST数据集进行训练.预测 导读           计算图在神经网络算法中的作用.计算图的节点是由局部计算构成的. ...

最新文章

  1. OpenOffce在Centos7安装和使用
  2. gcc编译报错:undefined reference to `std::cout‘
  3. VS中怎样使用Nuget添加MQTTnet依赖
  4. mail发送的内容显示为附件的解决办法
  5. 海马体what where记忆推理模型
  6. python3如何安装selenium_Mac-Firefox浏览器+selenium+Python3环境安装
  7. 如何实现登录、URL和页面按钮的访问控制?
  8. 关于 CSDN 下载频道知识产权保护的声明
  9. oracle typehandler,Mybatis实现自定义的类型转换器TypeHandler
  10. Linux用户环境变量及操作
  11. [设计]2019年全国电子设计竞赛A题-电动小车动态无线充电系统
  12. vue 修改logo实现展示自定义的logo
  13. 代码坏的味道21:被拒绝的遗赠 (Refused Bequest)
  14. 计算机特殊的标点符号教案,在电脑上怎么输入比较特殊的标点符号?
  15. 基于Python的招聘信息可视化分析研究
  16. python训练Word2Vec词向量
  17. 微信自定义分享功能二次封装
  18. IC基础知识(十一)时钟周期、状态周期、机器周期、指令周期和总线周期的定义及关系
  19. c代码触发sysrq-trigger
  20. 【JavaSe,Day03,note】

热门文章

  1. 怎么画好一个项目甘特图(内附实用模板)
  2. 海康视频VTM流监控浏览器实时播放调试总结
  3. 虚拟ip+keeplalived+nginx 负载实现
  4. 你也可以找到好工作(一)
  5. 带你解析微信公众号灵魂有香气的女子的创始人李筱懿
  6. windows 系统错误码总结
  7. 12、弱电工程综合布线各种设备材料图解,必学
  8. 四个坐标点顺时针排序
  9. 一起来看流星雨剧情简介/剧情介绍/剧情分集介绍第二十八集
  10. javaweb基于JSP+Servlet开发大数据与应用专业企业门户网站源码 课程设计 大作业