美文网首页
1、NSCoding初步学习

1、NSCoding初步学习

作者: 简鱼7819 | 来源:发表于2016-03-28 14:10 被阅读279次

NSCcoding是一个协议,基本上所有的原生的类都是实现了NSCoding协议,在归档的过程中进行了转码,所以才可以归档成功。

@protocol NSCoding

- (void)encodeWithCoder:(NSCoder *)aCoder;

- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder; // NS_DESIGNATED_INITIALIZER

@end

NSCcoding协议两个必须实现的方法!

  而且NSCoding多用于对自定义的类的实体对象进行归档,比如写一个student类

@interface Student : NSObject@property (nonatomic , retain) NSString *name;

@property (nonatomic , retain) NSString *ID;

-(Student *)initWithName : (NSString *)newName

and : (NSString *)newID;

@end

Student类需要实现协议NSCoding,.m文件中是这样的:

@implementation Student

@synthesize name = _name,ID = _ID;

//初始化学生类

-(Student *)initWithName:(NSString *)newName and:(NSString *)newID{

self = [super init];

if (self) {

self.name = newName;

self.ID = newID;

}

return self;

}

//学生类内部的两个属性变量分别转码

-(void)encodeWithCoder:(NSCoder *)aCoder{

[aCoder encodeObject:self.name forKey:@"name"];

[aCoder encodeObject:self.ID forKey:@"ID"];

}

//分别把两个属性变量根据关键字进行逆转码,最后返回一个Student类的对象

-(id)initWithCoder:(NSCoder *)aDecoder{

if (self = [super init]) {

self.name = [aDecoder decodeObjectForKey:@"name"];

self.ID = [aDecoder decodeObjectForKey:@"ID"];

}

return self;

}

@end

自定义类Student实现了NSCoding协议以后,就可以进行归档转换了,具体实现:

Student *stu1 = [[Student alloc]initWithName:@"124" and:@"111"];//学生对象stu1

Student *stu2 = [[Student alloc]initWithName:@"223" and:@"222"];//学生对象stu2

NSArray *stuArray = [NSArray arrayWithObjects:stu1,stu2, nil];//学生对象数组,里面包含stu1和stu2

NSData *stuData = [NSKeyedArchiver archivedDataWithRootObject:stuArray];//归档

NSLog(@"data = %@",stuData);

NSArray *stuArray2 = [NSKeyedUnarchiver unarchiveObjectWithData:stuData];//逆归档

NSLog(@"array2 = %@",stuArray2);

在IOS的开发中,小数据量的持久化都用NSUserDefaults来实现,但是NSUserDefaults只能保存NSString, NSNumber, NSDate, NSArray, NSDictionary这些数据类型,但大多时候,我们会将一个对象实体做持久化的保存,由于不是大批量的数据,不会用到sqlite,那么这个时候NSUserDefaults会是很好的选择,其实对象类型可以通过NSCoding的委托方法来实现的。

相关文章

  • 1、NSCoding初步学习

    NSCcoding是一个协议,基本上所有的原生的类都是实现了NSCoding协议,在归档的过程中进行了转码,所以才...

  •   UIview 遵循的代理属性

    UiView的一些代理 一. 我们会在以下这些场合用到NSCoding: 1. XIB/Sto...

  • 知识小结三:NSCoding理解

    iOS - NSCoding协议的理解 NSCoding协议 一、NSCoding理解 NSCoder的具体子类使...

  • python初步学习(1)

    python自学一天 1.基本语法的实现 #基本语法 print("-----------------------...

  • ELK初步学习-1

    1. 实验环境 目的:使用ELK采集服务器的系统日志,并将数据可视化展示。介于之前没有这方面的经验,先从简单的开始...

  • NSCoding对象存储(注意:以后使用NSSecureCodi

    1. NSCoding是一个协议,遵守NSCoding协议的类,可以实现这个类到NSData的互相转换 2. 使用...

  • NSCoding

    NSCoding 定义: 一般情况下,UIView ,UIViewController ,都遵循了NSCoding...

  • NSCoding

    NSCoding是一个简单的协议,有两个方法:-initWithCoder:和encodeWithCoder:。遵...

  • NSCoding

    使用场景: 将对象存储成文件,当需要的时候随时可以调用 要求: 遵守NSCoding协议 NSCoding相关的类...

  • 归档、解档

    1.创建类 ZFPerson,遵循协议NSCoding @interface ZFPerson : NSObjec...

网友评论

      本文标题:1、NSCoding初步学习

      本文链接:https://www.haomeiwen.com/subject/zeujlttx.html