NSKeyedArchiver/unArchiver序列化自定义复合模型(模型包含模型)
在这里利用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序列化自定义复合模型(模型包含模型)相关推荐
- 探索ASP.NET MVC5系列之~~~4.模型篇---包含模型常用特性和过度提交防御
其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...
- 模型训练平台的构建_用5行代码构建自定义训练的对象检测模型
模型训练平台的构建 如今,机器学习和计算机视觉已成为一种热潮. 我们都已经看到了有关自动驾驶汽车和面部识别的新闻,并且可能想象到建立我们自己的计算机视觉模型将会多么酷. 但是,进入该领域并不总是那么容 ...
- 用5行代码构建自定义训练的对象检测模型
如今,机器学习和计算机视觉已成为一种热潮. 我们都已经看到了有关自动驾驶汽车和面部识别的新闻,并且可能想象到建立我们自己的计算机视觉模型将会多么酷. 但是,进入该领域并不总是那么容易,尤其是在没有扎实 ...
- Python使用numpy包编写自定义函数计算平均绝对误差(MAE、Mean Absolute Error)、评估回归模型和时间序列模型、解读MAE
Python使用numpy包编写自定义函数计算平均绝对误差(MAE.Mean Absolute Error).评估回归模型和时间序列模型.解读MAE 目录
- Python使用numpy包编写自定义函数计算均方误差(MSE、mean squared error)、评估回归模型和时间序列模型、解读MSE评估指标
Python使用numpy包编写自定义函数计算均方误差(MSE.mean squared error).评估回归模型和时间序列模型.解读MSE评估指标 目录
- R语言编写自定义函数、评估回归模型预测变量的相对重要性(Relative importance)、通过在所有可能的子模型中添加一个预测变量而获得的R方的平均增加、评估预测变量的重要度、并通过点图可视化
R语言编写自定义函数.评估回归模型预测变量的相对重要性(Relative importance).通过在所有可能的子模型中添加一个预测变量而获得的R方的平均增加.来评估预测变量的重要程度.并通过点图可 ...
- R语言构建logistic回归模型并评估模型:构建基于混淆矩阵计算分类评估指标的自定义函数、阳性样本比例(垃圾邮件比例)变化对应的分类器性能的变化、基于数据阳性样本比例选择合适的分类评估指标
R语言构建logistic回归模型并评估模型:构建基于混淆矩阵计算分类评估指标的自定义函数.阳性样本比例(垃圾邮件比例)变化对应的分类器性能的变化.基于数据阳性样本比例选择合适的分类评估指标 目录
- keras dense sigmoid_tf.keras一个存在自定义层时加载模型时的小坑
前言 Tensorflow在现在的doc里强推Keras,用过之后感觉真的很爽,搭模型简单,模型结构可打印,瞬间就能train起来不用自己写get_batch和evaluate啥的,跟用原生tenso ...
- DL之DNN:自定义2层神经网络TwoLayerNet模型(封装为层级结构)利用MNIST数据集进行训练、预测
DL之DNN:自定义2层神经网络TwoLayerNet模型(封装为层级结构)利用MNIST数据集进行训练.预测 导读 计算图在神经网络算法中的作用.计算图的节点是由局部计算构成的. ...
最新文章
- OpenOffce在Centos7安装和使用
- gcc编译报错:undefined reference to `std::cout‘
- VS中怎样使用Nuget添加MQTTnet依赖
- mail发送的内容显示为附件的解决办法
- 海马体what where记忆推理模型
- python3如何安装selenium_Mac-Firefox浏览器+selenium+Python3环境安装
- 如何实现登录、URL和页面按钮的访问控制?
- 关于 CSDN 下载频道知识产权保护的声明
- oracle typehandler,Mybatis实现自定义的类型转换器TypeHandler
- Linux用户环境变量及操作
- [设计]2019年全国电子设计竞赛A题-电动小车动态无线充电系统
- vue 修改logo实现展示自定义的logo
- 代码坏的味道21:被拒绝的遗赠 (Refused Bequest)
- 计算机特殊的标点符号教案,在电脑上怎么输入比较特殊的标点符号?
- 基于Python的招聘信息可视化分析研究
- python训练Word2Vec词向量
- 微信自定义分享功能二次封装
- IC基础知识(十一)时钟周期、状态周期、机器周期、指令周期和总线周期的定义及关系
- c代码触发sysrq-trigger
- 【JavaSe,Day03,note】