`

【转】IOS NScoding 序列化

    博客分类:
  • ios
 
阅读更多
开篇
1到底这个序列化有啥作用?
面向对象的程序在运行的时候会创建一个复杂的对象图,经常要以二进制的方法序列化这个对象图,这个过程叫做Archiving. 二进制流可以通过网络或写入文件中(来源于某教材的一段话)
本人的理解是当你于写数据需要本地存储时,即将你的数据写到硬盘上的时候,你就必须对他进行序列化,转换成二进制文件,从而便于在磁盘上的读写,同理在取出的时候必须将其在反序列化,这样才能将数据读出来,就好比加密和解密的过程。
2 为什么我将数据写到plist 中的时候,也是存储到本地的磁盘上,但是我就没有序列化啊?
大家有没有发现,其实plist 的数据是类型是有限制的,就那么几种特定的数据类型,,nsstring  ,大家有没有尝试过将一个自己定义的类放进去(写进plist ),在读出来?
结果是什么大家可以先猜想。
其实在nsstring 的类的定义中已经添加了协议<nscoding> 即他是实现了nscoding 代理的方法的。
@interface NSString : NSObject <NSCopying, NSMutableCopying, NSCoding>
深入
3 NScoder  和 NScoding
NScoding 是一个协议,主要有下面两个方法
-(id)initWithCoder:(NSCoder *)coder;//从coder中读取数据,保存到相应的变量中,即反序列化数据
-(void)encodeWithCoder:(NSCoder *)coder;// 读取实例变量,并把这些数据写到coder中去。序列化数据
NSCoder 是一个抽象类,抽象类不能被实例话,只能提供一些想让子类继承的方法。
NSKeyedUnarchiver   从二进制流读取对象。
NSKeyedArchiver       把对象写到二进制流中去。
4一个简单的例子
一般是在自己定义的类中需要在.h 文件中加入<NScoding>
在.m 文件众实现他的的两个代理方法,这个代理方法将会被自动调用
- (void)encodeWithCoder:(NSCoder *)aCoder 
{
    [aCoder encodeObject:self.InsureSolutionID forKey:@"personName"];
    [aCoder encodeObject:self.InsureSolutionName forKey:@"personAge"];
}

- (id)initWithCoder:(NSCoder *)aDecoder 
{
    self = [super init];
    if (self) 
    {
        self.InsureSolutionID = [aDecoder decodeObjectForKey:@"personName"];
        self.InsureSolutionName = [aDecoder decodeObjectForKey:@"personAge"];
    }
    return self;
}

以上是对该类序列化和反序列化。
 NSData *archiveCarPriceData = [NSKeyedArchiver archivedDataWithRootObject:self.DataArray];
    [[NSUserDefaults standardUserDefaults] setObject:archiveCarPriceData forKey:@"DataArray"];
 
 NSData *myEncodedObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"DataArray"];
     self.dataList = [NSKeyedUnarchiver unarchiveObjectWithData: myEncodedObject];
分享到:
评论

相关推荐

    NSCoding 对象存储序列化

    `NSCoding`是苹果提供的一种对象序列化机制,允许我们将对象转换为字节流(编码)并从字节流中还原对象(解码)。这对于保存、加载自定义对象到文件系统或云端存储非常有用。本篇文章将深入探讨`NSCoding`协议以及...

    iOS归档(序列化与反序列化)

    在iOS开发中,序列化与反序列化是数据持久化的重要手段,特别是在处理对象的状态保存、数据传输或者存储时显得尤为关键。iOS归档是一种原生的序列化机制,它利用Objective-C的Runtime特性,将对象转换为二进制数据,...

    使用NSCoding和NSFileManager保存数据demo

    它展示了如何利用NSCoding进行对象序列化和反序列化,以及如何利用NSFileManager进行文件操作,这些都是iOS开发中的基础技能。通过理解和实践这个示例,开发者可以更好地掌握数据持久化的概念,从而提高应用的用户...

    iOS Json 实体类序列化及反序列化

    本文将详细讲解如何在Objective-C或Swift环境下,针对ARC(Automatic Reference Counting)内存管理机制,实现JSON实体类的序列化与反序列化。 ### 一、序列化(Serialization) 序列化是指将对象转换为可以传输或...

    Parse-NSCoding, 用于序列化解析对象的iOS库.zip

    Parse-NSCoding, 用于序列化解析对象的iOS库 解析 nscoding此库为 PFObject/的实例或者子类添加 NSCoding 支持,以便它们可以被序列化和反序列化为( 对于自定义缓存插件,例如) 。 所有属性都将被序列化,包括解析...

    IOS应用源码——自动序列化AutoEncodeDecode.zip

    在iOS开发中,序列化是一种将对象转换为可存储或传输格式的过程,通常用于持久化数据或者在网络上传输数据。本资源"AutoEncodeDecode.zip"包含的是一套针对iOS应用的源码,专注于自动序列化功能,即AutoEncodeDecode...

    ios应用源码之自动序列化autoencodedecode 20181210

    当你实现NSCoding协议并定义两个方法`encodeWithCoder:`和`initWithCoder:`时,NSKeyedArchiver可以自动处理对象的序列化和反序列化。 Swift的Codable协议则是更现代且更简洁的解决方案。如果一个类型遵循 Codable ...

    iOS objective-c 实体类对象的序列化为Json及反序列化

    总之,iOS应用开发中,Objective-C实体类对象的序列化和反序列化是数据持久化和网络通信的重要手段。通过`NSJSONSerialization`类,我们可以方便地在对象和JSON格式之间进行转换,从而实现数据的存储和交换。同时,...

    IOS应用源码——自动序列化AutoEncodeDecode.rar

    在iOS开发中,序列化是一种将对象转换为可存储或传输格式的过程,而反序列化则是将这种格式恢复为原始对象。本项目"AutoEncodeDecode"聚焦于iOS应用中的自动序列化与反序列化技术,这在数据持久化、网络通信等方面...

    iOS中自动实现对象序列化的方法详解

    在iOS 中实现对象序列化,需要遵行NSCoding协议,然后对对象的每个属性进行归档和接档赋值,响应的操作比较繁琐。本文主要介绍 利用 runtime遍历属性 大大简化代码量,下面来看看详细的介绍吧。 具体实现代码如下: ...

    ios-利用NSCoding与runtime实现模型本地存储.zip

    `NSCoding`是Apple提供的一种序列化机制,用于对象的编码和解码,从而实现数据的持久化。当一个类遵循`NSCoding`协议时,需要实现两个方法:`encodeWithCoder:`和`initWithCoder:`。前者负责将对象编码为可以存储的...

    IOS应用源码——NSUserdefaults(读取和写入自定义对象).rar

    iOS提供了`NSKeyedArchiver` 和 `NSKeyedUnarchiver` 这两个类来进行对象的序列化和反序列化。 在`NSUserDefaults`中存储自定义对象的步骤如下: 1. 实现`NSCoding`协议:自定义的对象需要遵循`NSCoding`协议,并...

    iOS对象转字典 object2Dictionary

    这种转换在序列化和反序列化过程中扮演着关键角色,使得数据能够在网络之间传输和存储。 首先,让我们讨论对象转字典的过程。在Objective-C中,我们可以使用NSKeyedArchiver和NSKeyedUnarchiver来实现。`...

    ios-iOS 存取数据之归档.zip

    总结来说,"iOS 存取数据之归档"这个主题涵盖了如何使用Objective-C或Swift中的归档技术来持久化数据,特别是通过NSKeyedArchiver进行序列化和反序列化的步骤。通过示例代码如`SaveDate`,我们可以学习如何处理不同...

    iOS工具一键JSON转OC数据模型类

    这些类通常遵循`NSCopying`和`NSCoding`协议,以便进行对象复制和序列化/反序列化操作。 例如,假设有一个JSON如下: ```json { "name": "John Doe", "age": 30, "isDeveloper": true, "hobbies": ["reading",...

    Coding iOS客户端开源

    在iOS开发中,`NSCoding` 是一个非常重要的协议,它允许对象进行序列化和反序列化,即将对象的状态转化为可以存储或传输的数据格式,然后再还原回来。在标题提到的"Coding iOS客户端开源"项目中,`NSCoding` 被用于...

    ios-数据存储管理类.zip

    在iOS中,通常会将使用`NSCoding`序列化的数据存储在文档目录下,以避免用户数据丢失,并确保应用的安全性和隐私。 4. **如何使用`NSCoding`?** - 实现`NSCoding`协议:为你的自定义类添加协议遵循,并实现`...

    iOS中几种数据持久化方案.pdf

    NSKeyedArchiver是Objective-C中的序列化工具,可以将对象编码为可存储的字节流,然后解码恢复。适用于自定义对象的持久化,但需要遵循NSCoding协议。归档和解档方法分别是`archiveRootObject:toFile:`和`...

    ios demo,NSData和NSDictionary之间的相互转换的实现案例

    需要注意的是,当转换过程中涉及到自定义对象时,需要确保这些对象遵循了`NSCoding`协议,因为`NSKeyedArchiver`需要这个协议来序列化和反序列化对象。 在提供的压缩包文件`test_NSDictionary_NSData`中,可能包含...

Global site tag (gtag.js) - Google Analytics