归档 & 解档】的更多相关文章

前言: 前天学习了NSUserDefaults,我们知道NSUserDefaults不能保存自定义对象,所以我们今天来认识一下归档(NSKeyedArchiver)和解档(NSKeyedUnarchiver).我们先来回顾一下JAVA是怎么实现保存一个自定义对象的!首先一个自定义对象必须实现Serializable接口,然后把一个对象序列化成二进制数据写入一个byte[]数据或者文件,反之则是从一个二进制数据或者文件中读取二进制数据反序列化成对象,所以我认为ios的归档解档其实就是类似JAVA序…
iOS中的永久存储,也就是在关机重新启动设备,或者关闭应用时,不会丢失数据.在实际开发应用时,往往需要持久存储数据的,这样用户才能在对应用进行操作后,再次启动能看到自己更改的结果与痕迹.ios开发中,我们需要数据持久化这一种技术,也需要不断在实际开发的工作与学习中完善数据持久化这一开发技术. [本次开发环境: Xcode:7.2     iOS Simulator:iphone6S plus   By:啊左]     (本节2个项目demo的下载:属性列表Demo.对象的归档解档Demo) 本文…
在之前转载的一片文章中,文中对浅复制和深复制进行了详细的解读,同时还提到了深复制(one-level-deep copy).完全复制(true copy)的概念,并指出iOS开发中的深复制是单层深赋值,本文将对这几个概念进行验证梳理. (单层和完全概念区分:例如多层数组只实现一层内容拷贝,其他层为指针拷贝成为单层深复制:若多层内容都实现拷贝称为完全复制) 程序中用到的几点概念补充 (1) 浅复制(shallow copy):在浅复制操作时,对于被复制对象的每一层都是指针复制. 深复制(one-l…
在构建应用程序时,有一个重要的问题是如何在每次启动之间持久化数据,以便重现最后一次关闭应用前的状态.在iOS和OS X上,苹果提供了三种选择:Core Data.属性列表(Property List)和带键值的编码(NSKeyedArchiver).当涉及到建模.查询.遍历.持久化等复杂的对象图时,Core Data无可替代.但并非所有应用程序都需要查询数据.处理复杂对象图,有时候使用NSKeyedArchiver更为简单. 1. 使用NSKeyedArchiver 如果要将各种类型的对象存储到…
代码实现 遵守协议 class AccessToken: NSObject, NSCoding 实现协议方法 // MARK: - 归档&解档 required init(coder aDecoder: NSCoder) { access_token = aDecoder.decodeObjectForKey("access_token") as! String expires_in = aDecoder.decodeDoubleForKey("expires_in&…
写于前: 在之前转载的一片文章中.文中对浅复制和深复制进行了具体的解读,同一时候还提到了深复制(one-level-deep copy).全然复制(true copy)的概念,并指出iOS开发中的深复制是单层深赋值,本文将对这几个概念进行验证梳理. (单层和全然概念区分:比如多层数组仅仅实现一层内容拷贝,其它层为指针拷贝成为单层深复制:若多层内容都实现拷贝称为全然赋值) 程序中用到的几点概念补充 (1) 浅复制(shallow copy):在浅复制操作时,对于被复制对象的每一层都是指针复制. 深…
1.iOS应用数据存储的常用方式XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3 Core Data 2.应用沙盒每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒应用沙盒的文件系统目录,如下图所示(假设应用的名称叫Layer)模拟器应用沙盒的根路径在: (apple是用户名, 8.0是模拟器版本)/Users/apple/Libra…
#import <Foundation/Foundation.h> @interface Student : NSObject <NSCoding>; @property(nonatomic,strong)NSString* name; @property(nonatomic,assign)int age; @property(nonatomic,copy)NSString* tel; -(id)initWithName:(NSString*)name endAge:(int)ag…
plist文件 plist的根Type只能是字典(NSDictionary)或者是数组(NSArray)所以归档时我们只能将数组或字典保存到plist文件中,但是NSString也能通过归档保存到plist文件中同时它也可以通过stringWithContentsOfFile解档,它保存到plist中时Type是空的,Value是有值的! plist文件的归档 NSArray *arr = [[NSArray alloc] initWithObjects:@"1", @"2&…
当我们归档自定义对象的时候,可以重写自定义Model的的encodeWithCoder和initWithCoder 开始的大概是这样的,当属性非常多的时候 这种方式就会觉得不还好 好像重复在做一样的事情 其实这块我们可以交给runtime来做 - (void)encodeWithCoder:(NSCoder *)aCoder //将属性进行编码 { [aCoder encodeObject:self.name forKey:@"name"]; [aCoder encodeObject:…
#import <Foundation/Foundation.h> @interface PYPerson : NSObject @property (nonatomic, assign) int age; @property (nonatomic, assign) int height; @property (nonatomic, copy) NSString *name; @property (nonatomic, assign) int age2; @property (nonatomi…
其中TRPerson为自定义的继承自NSObject的类的子类  其中有两个属性,name 和 age .h文件 #import @interface TRPerson : NSObject<</span>NSCoding> @property (nonatomic,strong)NSString *name; @property (nonatomic,strong)NSNumber * age; //初始化方法 - (id)initWithName:(NSString*)name…
一般用在用户登录,保存这个用户的信息 对象归档,就是把内存中对象持久化. 对象解档,就是把持久化的对象读取到内存. oc中对象归档解档大致分为以下几种方法: 从数量上可以分为: 对单个对象归档解档 对多个对象归档解档 从对象的存在形式上可以分为: 系统对象归档解档 自定义对象归档解档 接下来逐一编写代码做简单实现 1.单个系统对象归档及解档: void SingleSystemObject(){ NSArray *arr = [NSArray arrayWithObjects:@,, nil];…
KakaJSON可以只用一行代码将常用数据进行归档\解档 后面代码中会用到 file 文件路径 // 文件路径(String或者URL都可以) let file = "/Users/mj/Desktop/test.data" String let string1 = "123" // 将字符串写入文件 write(string1, to: file) // 从文件中读取字符串 let string2 = read(String.self, from: file) X…
自定义的对象的解档和归档 如果想对自己自定义的类进行解档和归档的话 必须遵循一个协议:NSCoding Student.h 文件 #import <Foundation/Foundation.h> @interface Student : NSObject<NSCoding> @property(nonatomic,strong)NSString *name; @property(nonatomic,assign)int age; -(instancetype)initWithNa…
当我们需要将一个对象进行归档时,都要让该对象的类遵守NSCoding协议,再实现归档和接档方法.例如有一个Person类,该类有两个成员变量 @property (nonatomic,copy) NSString *name; @property (nonatomic,assign) int age; 两个协议的实现方法如下 /** * 将对象写入某个文件时需要调用,在该方法中说明哪些属性需要存储 */ - (void)encodeWithCoder:(NSCoder *)encoder { […
简单的创建一个Person对象,并声明几个属性 @interface Person : NSObject<NSCoding> // 归档问题 必须遵守该协议 /** */ @property(copy,nonatomic)NSString * name; /** */ @property(assign,nonatomic)int age; @property(assign,nonatomic)int age1; @end 设置哪些属性是需要归档的 //告诉系统,归档哪些属性 - (void)e…
一.归档介绍 1.归档是指用某种格式来保存一个或多个对象,以便以后还原这些对象的过程.归档是将数据持久化的一种方式(所谓数据持久化,就是指在IOS开发过程中,将数据保存到本地,能够让程序的运行更加流畅). 2.想要归档的数据对象,需要遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:方法. 3.归档就是将临时数据保存成本地文件. 4.归档的缺点:归档的形式来保存数据,只能一次性归档保存以及一次性解压.所以只能针对小量数据,而且对数据…
归档和解档:即将数据写入文件和从文件中读取数据. 此处以plist文件为例说明, 一.plist文件使用时的注意事项: 1.plist文件中仅支持写入Array,Dictionary,Boolean,Data,Date,Number,String类型. 2.如果想要将自定义类的对象数据写入plist文件,则需要将对象修改为NSData类型写入. 二.归档步骤: 1.自定义的类必须遵守NSCoding协议,重写其归档和解档的方法.- (void)encodeWithCoder:(NSCoder *…
#import <Foundation/Foundation.h> #define PATH @"/Users/mac/Desktop/file.txt" int main(int argc, const char * argv[]) { @autoreleasepool { /*----------------------------归档对象-----------------------------*/ // 1.一个对象-XML属性列表归档 /* NSDictionar…
一.介绍 在OC中每一个对象持有的变量都是实例变量,实例变量包括成员变量和属性变量,在runtime中用Ivar表示对象的实例变量.其实,runtime源码中可以看到,Ivar也是一个结构体(基本上在runtime中变量的声明都是用结构体实现的),如下所示,同时苹果为这个结构体另外定义了一个结构体指针. //变量结构体 struct objc_ivar { //变量名称 char * _Nullable ivar_name OBJC2_UNAVAILABLE; //变量类型 char * _Nu…
IOS开发之NSCoding协议(使用runtime)近期学习IOS的runtime库,然后看到之前写的NSCoding协议有点复杂,如果属性少还好,如果100多个属性,则会显得麻烦.下面使用常规方式和使用Runtime两种方式进行比较,然后总结一下中间遇到的坑. 1.常规方法做归档与解档 //自定义Person类继承自NSObject .h文件 @interface Person : NSObject<NSCoding> @property(nonatomic,strong) NSStrin…
NSString *Name = @"yc"; //第一个常量NSDocumentDirectory表示正在查找沙盒Document目录的路径(如果参数为NSCachesDirectory则表示沙盒Cache目录), //第二个常量NSUserDomainMask表明我们希望将搜索限制在应用的沙盒内: NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, Y…
1 使用归档的方式保存文件 1.1 问题 归档是任何对象都可以实现的更常规的方式,可以进行归档的对象需要实现NSCoding协议,而且每个实例变量应该是基本数据类型或者是实现NSCoding协议的某个类的实例.本案例使用归档NSKeyedArchiver和反归档NSKeyedUnarchiver将TRPerson对象写入和读取文件. 1.2 方案 首先创建一个TRPerson类,继承至NSObject,该类有两个属性NSString类型的name和NSInteger类型的age. 其次TRPer…
#import <objc/runtime.h> #import <objc/message.h> @implementation HDFArchiveModel - (void)encodeWithCoder:(NSCoder *)aCoder { unsigned ; Ivar *ivars = class_copyIvarList([self class], &outCount); ; i < outCount; ++i) { Ivar ivar = ivars…
毕竟是生产..... 提示以下信息:  gzip: stdin: not in gzip format  tar: Child returned status 1  tar: Error is not recoverable: exiting now 原因是:这个压缩包没有用gzip格式压缩,所以不用加z指令 解决办法:使用 $ tar -xvf xxxx.tar.gz 命令(即去掉z参数)…
ios提供了两个类 NSKeyedArichiver NSKeyedUnarchiver对自定义对象进行归档 和解档操作 归档常见方法 - (void)encodeObject:(id)objv forKey:(NSString *)key;- (void)encodeConditionalObject:(id)objv forKey:(NSString *)key;- (void)encodeBool:(BOOL)boolv forKey:(NSString *)key;- (void)enc…
归档又叫序列化(coding) //   归档NSKeyedArchiver //   解归档NSKeyedUnarchiver // 归档之后的文件 会被加密 //  可以归档的文件.数据-->任何数据(直接归档一个实例化的对象.数组.字典.字符串.文本.图片...). -----------------------------------------两种解归档的方法------------------------------------------ 首先写了一个错误提示方法: 1.第一种方法…
在平时的iOS开发中,我们经常用到的数据持久化存储方式大概主要有:NSUserDefaults(plist),文件,数据库,归档..前三种比较经常用到,第四种归档我个人感觉用的还是比较少的,恰恰因为用的比较少,但是还是有地方要用到,所以今天再把归档解档复习一遍吧. 一.什么是归档: 对象归档是将对象以文件的形式保存到磁盘中(也称为序列化,持久化) :使用的时候读取该文件的保存路径读取文件的内容(也称为解档,反序列化). 二.归档 与 plist存储的区别: 对象归档的文件是保密的,在磁盘上无法查…
1.   NSUserDefaults //TODO: 1.NSUserDefaults NSUserDefaults类除了可以存储数组.字典.NSdata外,还可以直接存储OC基本类型属性.但是不能直接作用到自定义对象. [[NSUserDefaults standardUserDefaults] setObject:@"" forKey:@""];//设置初始值 [[NSUserDefaults standardUserDefaults] synchronize…