分享一下我老师大神的人工智能教程!零基础,通俗易懂!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;}
//第一种形式:归档对象//对象----》文件 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的内容: