【OC学习-27】对象的归档以及解归档——标准数据和自定义数据的例子

对象归档?就是把对象的数据保存成文件实现数据的加密(即在文档中不是明文显示)和永久储存。

需要使用时,则从文件中恢复即可。

(1)标准的数据

//main.m文件
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        //把一个数组进行归档
        //创建一个文件路径
        NSString *homePath=NSHomeDirectory();
        NSString *filePath=[homePath stringByAppendingPathComponent:@"test.archive"];//后缀也可以是.arc
        //创建个准备归档的数组
        NSArray *[email protected][@"111",@"222",@"333"];
        BOOL success=[NSKeyedArchiver archiveRootObject:arr1 toFile:filePath];
        if (success) {
            NSLog(@"success");
        }

        //从归档文件中恢复数据
        NSArray *arr2=[NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
        NSLog(@"%@",arr2);
    }
    return 0;
}

文件归档的效果,即创建了一个文件:

解归档,就是输出了数组的结果:

(
    111,
    222,
    333
)

(2)自定义数据的归档,即创建一个数据对象data,然后再把这个data写入到文件中(但是会先创建一个归档对象,并用归档对象的写入数据方法往这个数据对象中写入对象)。解归档,就是先把这个文件(其实是数据对象data)以data形式提炼出来,然后再解归档,然后利用key值调用对象值。

//main.m文件
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        //创建一个文件路径
        NSString *homePath=NSHomeDirectory();
        NSString *filePath=[homePath stringByAppendingPathComponent:@"custom.arc"];
        NSMutableData *data1=[NSMutableData data];//创建一个数据对象
        NSKeyedArchiver *arc1=[[NSKeyedArchiver alloc]initForWritingWithMutableData:data1];//以data数据对象创建一个归档对象
        [arc1 encodeObject:@"jack" forKey:@"name"];//把数据写入到归档文件中,即data中
        [arc1 encodeFloat:50 forKey:@"weight"];
        [arc1 finishEncoding];//结束写入数据
        [data1 writeToFile:filePath atomically:YES];//把数据对象写入归档文件中

        //先用数据对象把这个文件接下来
        NSData *data2=[NSData dataWithContentsOfFile:filePath];
        //再利用这个数据对象创建个解归档对象
        NSKeyedUnarchiver *unarc1=[[NSKeyedUnarchiver alloc]    initForReadingWithData:data2];
        //利用解归档对象提取里面值
        float weight1=[unarc1 decodeFloatForKey:@"weight"];
        NSString *name1=[unarc1 decodeObjectForKey:@"name"];
        NSLog(@"%.0f,%@",weight1,name1);
    }
    return 0;
}

文件归档的效果:

解归档的输出结果:

50,jack
时间: 2024-10-15 18:58:43

【OC学习-27】对象的归档以及解归档——标准数据和自定义数据的例子的相关文章

IOS阶段学习第18天笔记(归档与解归档操作)

IOS学习(OC语言)知识点整理 一.归档与解归档的操作 1)归档是一个过程,将一个或多个对象存储起来,以便以后可以还原,包括将对象存入文件,以后再读取 将数据对象归档成plist文件 2)plist文件中只能存放:NSString.NSDate.NSNumber.Bool.NSData.NSArray.NSDictionary 并且NSArray和NSDictionary中只能是以上的类型 3)归档存放时数据是什么类型,读取数据时就用什么类型的数据接收. 4)归档不能直接操作自定义对象类型的数

OC-自定义对象的归档与解归档

对于系统对象进行归档与接归档直接使用类提供的方法 参考:http://www.cnblogs.com/BeyondAverage0908/p/4596798.html 但是对于自定义的对象,当使用系统的类方法进行归档和解归档时,就会出现内存错误,错误信息是没有实现(归档时)- (void)encodeWithCoder:(NSCoder *)aCoder;方法,(解归档)时没有实现:- (id)initWithCoder:(NSCoder *)aDecoder; 所以如果需要自定义对象的归档与解

OC-多个自定义对象的归档与解归档

对于上一章节,简单讲述了一个自定义对象的归档与解归档:http://www.cnblogs.com/BeyondAverage0908/p/4597245.html 本章节阐述下多个自定义对象的归档与解归档 以下代码阐述:定义了两个类Dog和Cat,并且利用@property展开了对应的几个属性(简单的代码,不贴源码了). 以下代码部分位主要的归档与解归档代码:注意需要在对应的自定义类中实现以下两个方法:- (void)encodeWithCoder:(NSCoder *)aCoder;方法,-

iOS:沙盒、偏好设置、归档、解归档

一.沙盒和应用程序包 •iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被称为沙盒 •iOS常用目录: –Bundle –Documents –Library/Caches –Library/Preference –tmp 显示mac隐藏文件:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏mac隐藏文件:defaults write com.apple.finder AppleSh

关于iOS开发归档与解归档路径问题

今天回头看了一下归档与解归档,有普通的归档与解归档,更好的方法是runtimer.在这里我不是讲归档与解归档,而是讲很多文档中出现的一个问题,希望给大家带来帮助,不说废话了,上代码. 1:错误的代码 NSString *filePath = [NSHomeDirectory() stringByAppendingString:@"person"]; 很多文章中用这样的方式获取路径,这句代码的的意思是,在主路径上拼接一个person路径.可惜不成功,不成功的原因应该是苹果手机权限问题.

OC学习16——对象归档

转载自  OC学习篇之---归档和解挡 OC中的归档就是将对象写入到一个文件中,Java中的ObjectInputStream和ObjectOutputStream来进行操作的.当然在操作的这些对象都是需要实现一个接口:Serializable,同样的OC中操作的对象也是需要实现一个协议的,后面会说到. 一.已有类型的归档和解档 首先来看一个简单的例子: 1 // 2 // main.m 3 // 33_ObjectToFile 4 // 5 // Created by jiangwei on

iOS归档与解归档,持久化存储

点此下载iOS归档,持久化存储,解归档详细工程 //数据持久化的本质:将数据读取成文件保存在本地. 沙盒机制就是系统针对于每一个程序在本地生成的文件夹(名字随机生成), 对于不同的应用程序, 不能访问其他应用程序沙盒内的内容, 对于该应用程序内容起到保护作用:1 Documents:用来存储长久保存的数据 2 xxx.app:应用程序的包, 包含应用程序加载所需的所有资源(readonly只读, 不可修改), 平时使用的NSBundle就是该包 3 Library: 1) Caches:本地缓存

黑马程序员-OC学习日记-对象与方法、对象与函数

------- ios培训. android培训.java培训.期待与您交流! ---------- 一.NSString类简介 1.NSString是OC中用来表示字符串的一个类 2.NSString类创建 (1)通过字面量方式创建 NSString * str = @"要努力学习!"; (2)通过对象方法创建 NSString * str1 = [NSString alloc]; str1 = [str1 initWithUTF8String:"今天雾霾好大!"

oc学习之对象作为类的属性

对象做为类的属性 1. 一个Target中的类无法直接在另外1个Target中访问. 2. 类的属性代表什么? a. 类的属性代表这类事物具有的共同的特征 b. 类的属性代表这个类所拥有的东西. 灯: 属性: 形状 功率 价格  品牌 剩余寿命 方法: 照明. 音响: 方法: 发声音. 门: 属性: 尺寸 材料 颜色 价格 方法: 开 关 3. 类的方法代表什么? a. 代表这个类所具备的行为. 这个类所具备的功能. b. 一个类有什么方法 就去分析这个类有什么功能. 4. 属性的本质是变量.