OC学习篇之---归档和解挡

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

前几篇文章说到了OC中的Foundation框架:http://blog.csdn.net/jiangwei0910410003/article/details/41852835,今天我们来看一下OC中的一个重要知识点:归档

OC中的归档就是将对象写入到一个文件中,Java中的ObjectInputStream和ObjectOutputStream来进行操作的。当然在操作的这些对象都是需要实现一个接口:Serializable,同样的OC中操作的对象也是需要实现一个协议的,后面会说到。


一、已有类型的归档和解档

首先来看一个简单的例子:

////  main.m//  33_ObjectToFile////  Created by jiangwei on 14-10-13.//  Copyright (c) 2014年 jiangwei. All rights reserved.//#import <Foundation/Foundation.h>//归档:将一个对象写到文件中int main(int argc, const char * argv[]) {    @autoreleasepool {       //第一种形式:归档对象       //对象----》文件        /*        NSArray *array = [NSArray arrayWithObjects:@"zhang",@"wangwu",@"lisi",nil];        NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"array.src"];                BOOL success = [NSKeyedArchiver archiveRootObject:array toFile:filePath];        if(success){            NSLog(@"保存成功");        }         */        /*解归档        NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"array.src"];        id array = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];        NSLog(@"%@",array);         */                //第二种方式        //第一种方式的缺陷是一个对象归档成一个文件        //但是第二种方式,多个对象可以归档成一个文件        /*        NSArray *array = [NSArray arrayWithObjects:@"zhangsan",@"lisi", nil];        NSMutableData *data = [NSMutableData data];        NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];        //编码        [archiver encodeObject:array forKey:@"array"];        [archiver encodeInt:100 forKey:@"scope"];        [archiver encodeObject:@"jack" forKey:@"name"];                //完成编码,将上面的归档数据填充到data中,此时data中已经存储了归档对象的数据        [archiver finishEncoding];        [archiver release];                NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"array.src"];        BOOL success = [data writeToFile:filePath atomically:YES];        if(success){            NSLog(@"归档成功");        }         */                NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"array.src"];        //读取归档数据        NSData *data = [[NSData alloc] initWithContentsOfFile:filePath];                //创建解归档对象,对data中的数据进行解归档        NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];                //解归档        NSArray *array = [unarchiver decodeObjectForKey:@"array"];        NSLog(@"%@",array);                int value = [unarchiver decodeObjectForKey:@"scope"];        NSLog(@"%d",value);                            }    return 0;}


1、归档

//第一种形式:归档对象//对象----》文件 NSArray *array = [NSArray arrayWithObjects:@"zhang",@"wangwu",@"lisi",nil]; NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"array.src"];  BOOL success = [NSKeyedArchiver archiveRootObject:array toFile:filePath]; if(success){     NSLog(@"保存成功"); }
我们这里将一个NSArray对象写入到一个文件中。

这里说到了创建一个文件的方法:

 NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"array.src"];

我们可以打印一下filePath的值:


NSHomeDirectory()返回的就是当前用户路径

我们查看一下array.src的内容:

猜你喜欢

转载自blog.csdn.net/hgfujffg/article/details/84063945
今日推荐