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`协议以及如何使用它来序列化自定义对象。 **一、NSCoding协议** `NSCoding`是一个协议,定义了两个必须的方法:`encode(with:)`和`initWithCoder:`。当一个类遵循`NSCoding`协议,它...
一种使用NSCoding ^ _ ^的简单方法 在.m文件中添加两行代码,然后运行它! #import "property.h" #import "CXLCodingHelper.h" @implementation property - (id)initWithCoder:(NSCoder *)aDecoder { self = ...
`NSCoding` 是一个在 Objective-C 中被广泛使用的协议,它定义了对象如何进行序列化和反序列化的标准方法。序列化是指将对象的状态转化为一种可以持久存储或者在网络中传输的形式;反序列化则正好相反,即将存储或...
5. 在`+load`方法中,我们需要使用Method Swizzling技术替换`encodeWithCoder:`和`initWithCoder:`方法,以调用我们自动生成的编码/解码方法。这部分代码会比较复杂,涉及到Runtime中的method_getImplementation、...
几句话就能让你的 NSCoding 协议自动化。 ##用法 安装 将两个文件复制到您的项目中,然后#import "NSObject+NSCoding.h" 。 现在支持CocoaPods 。 ###自定义类 self是Parent的子类 上级: # pragma mark - ...
然而,在Swift中,由于类型安全和语言特性,不能直接使用Objective-C的宏定义,如MJExtension。 以下是如何在Swift中实现`NSCoding`的自动归档和解档: 1. 首先,创建一个基类,该基类遵循`NSCoding`协议。这个...
MsgPackArchiver 和 MsgPackUnarchiver 比标准 Cocoa 类快得多(数倍),并且使用更少的空间来存储数据,同时仍然是 NSCoder 子类。 注意事项 部分性能提升来自 MsgPack 编码器显式处理 NSString、NSArray 和 ...
首先,要使用归档,我们需要实现NSCoding协议。在Objective-C中,我们通常会为要归档的类创建一个Category,并在Category中实现协议的方法: ```objc @interface MyClass (NSCoding) <NSCoding> @end @...
这个压缩包"IOS应用源码——NSUserdefaults(读取和写入自定义对象).zip"包含了一个示例项目,展示了如何使用`NSUserDefaults`来读取和写入自定义对象。下面我们将深入探讨这个主题。 首先,`NSUserDefaults` 是...
在实际应用中,我们可以使用`UserDefaults`来存储简单数据,或者使用`NSKeyedArchiver`和`NSKeyedUnarchiver`来处理更复杂的对象归档和解档。 归档步骤如下: 1. 创建一个`NSKeyedArchiver`实例。 2. 使用`...
### Archiver归档的使用 #### 一、概述 在iOS开发中,数据持久化是一项基本而重要的功能,其中一种常见的方法就是使用归档技术。归档是一种将对象转换为可存储或传输格式的过程,通常用于保存应用的状态或数据。在...
归档是将对象转换为其字节表示的过程,这个过程由NSCoder协议定义。在Objective-C中,主要有两个类实现了NSCoder协议:NSKeyedArchiver和NSArchiver。NSKeyedArchiver通常用于创建人类可读的XML格式的归档文件,而...
然而,对于Objective-C(OC)兼容或跨平台需求,仍然可能需要使用NSCoding。 总的来说,Swift 5.2中的归档解档机制对于处理model数组至关重要,因为它允许我们在应用生命周期之外保存和恢复数据,确保用户体验的...
- 在使用`NSUserDefaults`存储自定义对象时,确保对象是可序列化的,即遵循了`NSCoding`协议。 - 尽量避免在`NSUserDefaults`中存储大量数据,因为它主要设计用于存储轻量级的偏好设置,而不是数据库级别的数据。 - ...
在实际开发中,Xcode的代码生成能力可以大大提高开发效率,例如使用插件或者自定义模板快速生成上述的懒加载、NSCoding协议实现以及接口转属性的代码。对于大型项目,这样的自动化工具尤其重要,可以减少手动编写...
Objective-C是苹果生态系统中广泛使用的编程语言,本教程将探讨如何在Objective-C中实现iOS App的状态修复。 一、状态修复的概念 状态修复是指应用程序在重新启动或从后台恢复时,能够恢复到用户离开时的状态,包括...
自动归档是iOS提供的一种数据持久化方法,它基于NSCoding协议,可以帮助开发者无须手动编写大量的序列化和反序列化代码,就能实现对象到文件的存储。本篇文章将深入探讨iOS自动归档的实现及其优势。 首先,我们要...
首先,我们需要理解苹果的Foundation框架提供的NSCoding协议。任何需要被归档的对象必须遵循这个协议,提供两个关键方法:`encodeWithCoder:` 和 `initWithCoder:`。`encodeWithCoder:`用于编码(归档)对象,而`...
在XYFModel-master这个项目中,可能包含了实现上述功能的代码示例,你可以参考并学习如何在你的项目中安全、简便地使用这些技术。确保理解并适当地应用这些知识点,能提升你的代码质量和开发效率。