对象归档

#import <Foundation/Foundation.h>

@interface user : NSObject<NSCoding>
@property(nonatomic,copy)NSString* name;
@property(nonatomic,copy)NSString* age;
@end

#import "user.h"
@implementation user
-(void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeObject:self.age forKey:@"age"];
}
-(id)initWithCoder:(NSCoder *)aDecoder
{
    self.name=[aDecoder decodeObjectForKey:@"name"];
    self.age=[aDecoder decodeObjectForKey:@"age"];
    return self;
}
@end

#import "ViewController.h"
#import "user.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    user * use=[[user alloc]init];
    [email protected]"zefeng";
    [email protected]"11";
    //    对象归档需要实现这两给方法  归档调用-(void)encodeWithCoder:(NSCoder *)aCoder 解归档 -(id)initWithCoder:(NSCoder *)aDecoder

NSString * path =[NSHomeDirectory() stringByAppendingString:@"use.archiver"];
    NSMutableData * data =[NSMutableData data];
    NSKeyedArchiver * archive=[[NSKeyedArchiver alloc]initForWritingWithMutableData:data];//二进制存储
    [archive encodeObject:use forKey:@"user"];//归档参数
    [archive finishEncoding];//结束归档
    [data writeToFile:path atomically:YES];//写入路径文件
    
    //读取归档文件
    NSData * content =[NSData dataWithContentsOfFile:path];
    NSKeyedUnarchiver * unarchiver=[[NSKeyedUnarchiver alloc]initForReadingWithData:content];
    user* useData=[unarchiver decodeObjectForKey:@"user"];//根据key 找到对象
    
    NSLog(@"%@",useData.name);

}

时间: 2024-10-11 17:42:21

对象归档的相关文章

IOS开发——UI进阶篇(十一)应用沙盒,归档,解档,偏好设置,plist存储,NSData,自定义对象归档解档

1.iOS应用数据存储的常用方式XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3 Core Data 2.应用沙盒每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒应用沙盒的文件系统目录,如下图所示(假设应用的名称叫Layer)模拟器应用沙盒的根路径在: (apple是用户名, 8.0是模拟器版本)/Users/apple/Libra

iOS开发——数据持久化Swift篇&amp;模型对象归档

模型对象归档 1 import UIKit 2 3 class ViewController: UIViewController { 4 5 6 7 @IBOutlet weak var textField: UITextField! 8 9 @IBAction func btnSave(sender: UIButton) { 10 var text = textField.text as NSString 11 var image = UIImage(named: "log") 12

Swift实现对象归档

Swift实现对象归档时有几个注意点 要继承 NSCoding,实现两个方法 extension 是一个分类,分类不允许有存储能力,所以协议方法不能写在分类中 协议中的init(coder decoder: NSCoder)函数会覆盖原始的构造函数,所以类中至少还要有另一个init方法 如果不指定键名,会使用属性名称作为 key,基本数据类型,需要指定 key class <#className#>: NSObject,NSCoding { // 至少要有一个 init 方法,否则外部没有办法

IOS --- 对象归档

原文:http://blog.sina.com.cn/s/blog_7124765801015imx.html IOS提供的数据持久化方式有:SQLite.CoreData.属性列表.NSUserDefault.对象归档. 这里来简单介绍下对象归档: 对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化),使用的时候读取该文件的保存路径读取文件的内容(也称为接档,反序列化), (对象归档的文件是保密的,在磁盘上无法查看文件中的内容,而属性列表是明文的,可以查看). 对象归档有两种方

iOS文档序列化(对象归档)

对象归档: 概念: 对象归档是指将对象写入文件保存在硬盘,当再次重新打开程序时,可以还原这些对象.也称:对象序列化.对象持久化. 数据持久性的方式(其实就是3类) 1,NSKeyedArchiver--对象归档 2,NSUserDefaults  3,属性列表 4,SQLite数据库  5,Core Data数据库 归档方式: 对Foundation库中对象进行归档 自定义对象进行归档(需要实现归档协议,NSCoding) 归档与属性列表的区别: 1,归档后的文件是加密的,属性列表是明文的. 2

ios学习笔记——对象归档

对象归档是一种序列化方式.为了便于数据传输,先将归档对象序列化为一个文件,然后再通过反归档将数据恢复到对象中. 归档技术可以实现数据的持久化,不过在大量数据和频繁读写的情况下,它就不太适合了. 对一个对象进行归档的条件是:改对象的类必须实现NSCoding协议,而且每个成员对象应该是基本数据类型或都是实现NSCoding协议的某个类的实例.

OC学习16——对象归档

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

浅谈iOS开发中的对象归档

iOS提供的数据持久化方式有:SQLiteCoreData属性列表.NSUserDefault对象归档. 这里来简单介绍下iOS开发中的对象归档: 对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化)使用的时候读取该文件的保存路径读取文件的内容(也称为接档,反序列化) 对象归档的文件是保密的磁盘上无法查看文件中的内容,而属性列表是明文的可以查看) 对象归档有两种方式:1.对foundat中对象进行归档     2.自定义对象归档 1.简单对象归档 使用两个类:NSKeyedA r

IOS-MJExtension一句话搞定对象归档

MJExtension很强大,几乎支持现有所有的模型.字典.json数据转换,而且效率非常高 以前写对象归档的时候,需要让这个对象实现NSCoding协议,而且要对每一个需要归档的属性做一些encode和decode操作,例如你之前的代码可能是这样子的 Person.h文件 #import "Person.h" @interface Person : NSObject <NSCoding> @property (nonatomic,copy) NSString *name;