NScoder和NScoding的作用是将自定义的类的对象持久化保存
NSCoding 协议
这两个方法由系统来调用
// NSKeyedUnarchiver会把二进制流转化为对象 - initWithCoder // 从coder中读取数据,反序列化数据,实例化一个对象 // NSKeyedArchiver会把对象转化为二进制流 - encodeWithCoder: // 读取实例变量,把对象序列化,写到coder中
一个简单的例子:
.h
@interface GKPerson : NSObject <NSCoding> @property (nonatomic,strong) NSString *firstName; @property (nonatomic,strong) NSString *lastName; @end
.m
#import "GKPerson.h" @implementation GKPerson - (instancetype)initWithCoder:(NSCoder *)coder { // self = [super initWithCoder:coder]; self = [super init]; if (self) { self.firstName = [coder decodeObjectForKey:@"first_name"]; self.lastName = [coder decodeObjectForKey:@"last_name"]; } return self; } - (void)encodeWithCoder:(NSCoder *)coder { // [super encodeWithCoder:coder]; [coder encodeObject:self.firstName forKey:@"first_name"]; [coder encodeObject:self.lastName forKey:@"last_name"]; } @end
把对象持久化保存
// 把对象保存在本地 GKPerson *peter = [[GKPerson alloc] init]; peter.firstName = @"peter"; peter.lastName = @"nana"; NSData *data = [NSKeyedArchiver archivedDataWithRootObject:peter]; [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"peter"];
从本地读取对象
NSData *tData = [[NSUserDefaults standardUserDefaults] objectForKey:@"peter"]; GKPerson *person = [NSKeyedUnarchiver unarchiveObjectWithData:tData];
相关推荐
一种使用NSCoding ^ _ ^的简单方法 在.m文件中添加两行代码,然后运行它! #import "property.h" #import "CXLCodingHelper.h" @implementation property - (id)initWithCoder:(NSCoder *)aDecoder { self = ...
一个受NSCoder启发的序列化API的一个Swift实现
几句话就能让你的 NSCoding 协议自动化。 ##用法 安装 将两个文件复制到您的项目中,然后#import "NSObject+NSCoding.h" 。 现在支持CocoaPods 。 ###自定义类 self是Parent的子类 上级: # pragma mark - ...
SwiftyCoder Swift中的NSCoder包装器。
MsgPackArchiver 和 MsgPackUnarchiver 比标准 Cocoa 类快得多(数倍),并且使用更少的空间来存储数据,同时仍然是 NSCoder 子类。 注意事项 部分性能提升来自 MsgPack 编码器显式处理 NSString、NSArray 和 ...
所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据。在iOS开发中,有很多数据持久化的方案(plist、preference(userdefault)、NScoder(归档))
void encodeWithCoder: NSCoder aCoder{ [aCoder encodeObject: comment forKey:@"comment"]; [aCoder encodeObject: content forKey:@"content"] ; [aCoder encodeObject: creatTime for...
( coder aDecoder : NSCoder) { let text = Text ( text : " Hello, World! " , place : . move ( dx : 145 , dy : 100 )) super . init ( node : text, coder : aDecoder) } } 具有SVG支持 将可缩放矢量图形...
【注意】:自定义模型要进行归档或者解档操作,必须遵守协议,并且实现- (void)encodeWithCoder:(NSCoder *)aCoder;- (id)initWithCoder:(NSCoder *)aDecoder ;这2个方法; 3.如果一个数据模型需要进行数据库存储...
我们将学习在iOS中本地保存数据的各种选项,包括Core Data,Realm,NSCoder,UserDefaults和Keychain。 了解存储和检索敏感数据的最佳做法以及如何使用iOS文件系统。 先决条件: 课程细节 课程交付:在线| 7周14...
NSKeylessArchiver-iOS ... 然后,只需#import“ NSKeylessArchiver.h”并像NSCoder一样使用它。 有关示例,请参见下面的性能测试项目。 何时使用 如果您有不依赖于键的NSKeyedArchiver的中型到大型用例(例如,仅使用-
用Swift编写的简单缓存服务,用于缓存NSObjects(以及UIImage,因为UIImage符合NSCoding / NSSecureCoding)和Codable。 常规NSObject + NSSecureCoding和Codable类实现示例: class NSTestObject : NSObject , ...
版本版本1.0如何使用下载并将NSObjectCoder文件夹直接拖到您的项目中。 对于扩展任何类NSObject ,你想进行编码和解码,进口NSObjectCoder.h到您.h文件: # import `NSObjectCoder.h`将以下代码复制并粘贴到.m文件中...
原作者的PLBaseView初始化只重写了- (id)initWithCoder:(NSCoder*)coder ,没有重写- (id)initWithFrame。搞得我这种不用storyboard的人,找了半天没图像的原因。哈哈,其实主要是想混点分的,希望大家多多下载=。...
入门请参阅上的安装说明和示例代码:产品特点使用字典进行简单的BSON编码和解码。 对数组,字典,嵌入式对象,字符串,数字,日期,对象ID和其他MongoDB类型的内置支持。 基于NSCoder的键控编码方案的更复杂的编码和...
Realm NSCoder墨西哥演示 2015年7月15日 指示 该演示需要Marvel API的密钥,您可以从其获取它们。 完成后,将它们放在API.swift文件中。