开篇
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];
本文出自 “技术成就梦想” 博客,请务必保留此出处http://285746555.blog.51cto.com/2966432/647312
分享到:
相关推荐
自定义的对象不能直接存储 对自定义对象实现nscoding 协议 可实现对自定义对象的存储
Parse-NSCoding, 用于序列化解析对象的iOS库 解析 nscoding此库为 PFObject/的实例或者子类添加 NSCoding 支持,以便它们可以被序列化和反序列化为( 对于自定义缓存插件,例如) 。 所有属性都将被序列化,包括解析...
用NSCoding持久化数据,以及如何用NSFileManager来有效地保存文件。
在iOS 中实现对象序列化,需要遵行NSCoding协议,然后对对象的每个属性进行归档和接档赋值,响应的操作比较繁琐。本文主要介绍 利用 runtime遍历属性 大大简化代码量,下面来看看详细的介绍吧。 具体实现代码如下: ...
转载资源,分享给各位一起学习苹果开发的童鞋们,加油加油。
只需要模型继承自本类即可直接调用方法存储模型
iOS中有五种持久化数据的方式:属性列表、对象归档、NSUserDefaults、SQLite3和Core Data NSUserDefaults官方文档介绍: NSUserDefaults类为和默认系统类交互提供了一种编程接口。默认系统允许应用程序去定制其行为...
NSObject的类别,可以对任何自定义类进行序列化和反序列化。 它对于所有自定义类都是通用的,您只需要使用两种方法来进行序列化和反序列化即可。 这可以使obj成为字典,并使obj成为字典。 我想你可以自己做字典到...
整个模型由派生组成,因此NSCopying和NSCoding兼容,并且可以轻松地从JSON序列化。 使用和的改编,因此可以轻松地序列化到XML或从XML序列化。 围绕NSOperationQueue和NSURLSessions构建,因此您可以使用熟悉的工具...
几句话就能让你的 NSCoding 协议自动化。 ##用法 安装 将两个文件复制到您的项目中,然后#import "NSObject+NSCoding.h" 。 现在支持CocoaPods 。 ###自定义类 self是Parent的子类 上级: # pragma mark - ...
关于NSCoding方法的使用,提供了项目和任务管理、消息和用户中心,以及一个类似论坛的功能
一种使用NSCoding ^ _ ^的简单方法 在.m文件中添加两行代码,然后运行它! #import "property.h" #import "CXLCodingHelper.h" @implementation property - (id)initWithCoder:(NSCoder *)aDecoder { self = ...
实现NSCoding的自动归档和解档.zip
iOS Code Signing解惑.pdf iPhone上面的现实增强(Augmented Reality)入门教程.pdf OpenGL ES2.0 – Iphone开发指引.pdf OpenGLES2.0 Iphone开发指引:第二部分,纹理贴图.pdf 使用cocos2d和box2d制作滚动背景.pdf ...
任何反序列化为 Cocoa/EDN 对象的有效 edn 数据都应该序列化回相同的 edn UTF-8 数据(字符串中和 edn 数据中的空格除外)。 这包括“根”; 不在任何根容器内的顶级对象。 标记元素(如内置的uuid和inst )可被...
它可以序列化和存储任何实现NSCoding协议的NSCoding 。 因此,立即支持许多对象: NSDictionary NSArray NSNumber NSString 等等。 用法 # import " kvdb.h " [[KVDB sharedDB ] setValue: @" apple " forKey...
FastCoder是用于Cocoa对象和对象图的高性能二进制序列化格式。 它旨在替代NSPropertyList,NSJSONSerializer,NSKeyedArchiver / Unarchiver和Core Data。 FastCoder库的设计目标是快速,灵活和安全。 FastCoder的...
我们都知道NSArry中如果存放的是普通的字符串类型,是很容易存入到plist文件中,也很容易从文件中读取出来,那如果NSArray中存放的是自定义的Person对象呢?该如何存入文件中去呢? 参考博客:...
Mantle--国外程序员最常用的iOS模型&字典转换框架,Mantle可以轻松把JSON数据、字典(Dictionary)和模型(即Objective对象)之间的相互转换,支持自定义映射,并且内置实现了NSCoding和NSCoping,大大简化归档操作...
iOS 7.0以上版本/ Mac OS X 10.9以上版本 Xcode 7 安装 CocoaPods和Carthage的支持即将推出(Carthage可能会起作用,我尚未对其进行测试)。 否则,只需将FierceCoder项目添加到您的工作区中,然后将FierceCoder设置...