1、NSCoding初步学习

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的委托方法来实现的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,762评论 0 9
  • 沙盒 Plist Preference偏好设置 NSKeyedArchiver归档 / NSKeyedUnarch...
    追风者366阅读 3,391评论 0 6
  • 本文结构 参考孟岩老师的文章,对本文结构如下划分 基本数据类型基本语法数组和其他集合类基本输入输出和文件处理,输入...
    不抄完整本三国不改名阅读 538评论 0 1
  • 下面是我最近两年学习OC中的一些基础知识,对于学习OC基础知识的人可能有些帮助,拿出来分享一下,还是那句话不喜勿喷...
    小小赵纸农阅读 2,635评论 1 7
  • 一、归档介绍 1.归档是指用某种格式来保存一个或多个对象,以便以后还原这些对象的过程。归档是将数据持久化的一种方式...
    lilinjianshu阅读 863评论 0 0