对象归档:把对象的数据归档到文件上,编程一种有结构型的文件数据,实现NSCoding协议(接口),实现归档与解档两个方法.
下面实例是一个对象归档是实例
//
// User.h
// defineStoreDemo
//
// Created by 5016 on 13-12-18.
// Copyright (c) 2013年 dradon. All rights reserved.
//
#import <Foundation/Foundation.h>
//自定义归档,实现NSCoding协议(接口)
@interface User : NSObject<NSCoding>
@property(retain,nonatomic)NSString* name;
@property(retain,nonatomic)NSString* email;
@property(retain,nonatomic)NSString* password;
@property(assign,nonatomic)int age;
-(NSString *)printStr;
@end
//
// User.m
// defineStoreDemo
//
// Created by 5016 on 13-12-18.
// Copyright (c) 2013年 dradon. All rights reserved.
//
#import "User.h"
@implementation User
@synthesize name = _name,email = _email,password=_password,age = _age;
//对属性编码,归档时调用
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeInt:_age forKey:@"age"];
[aCoder encodeObject:_name forKey:@"name"];
[aCoder encodeObject:_email forKey:@"email"];
[aCoder encodeObject:_password forKey:@"password"];
}
//对属性进行解码,解档时候调用
- (id)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super init]) {
_age = [aDecoder decodeIntForKey:@"age"];
self.name =[aDecoder decodeObjectForKey:@"name"];
self.email =[aDecoder decodeObjectForKey:@"email"];
self.password = [aDecoder decodeObjectForKey:@"password"];
}
return self;
}
-(NSString *)description
{
NSString *str =[NSString stringWithFormat:@"name = %@ ,age=%d,email = %@,password=%@",self.name,self.age,self.email,self.password];
return str;
}
-(void)dealloc
{
[_password release];
[_email release];
[_name release];
[super dealloc];
}
@end
//
// main.m
// defineStoreDemo
//
// Created by 5016 on 13-12-18.
// Copyright (c) 2013年 dradon. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "User.h"
//归档
void store(User *user)
{
//1.获取路径
NSString *homePath = NSHomeDirectory();
NSString *targetPath = [homePath stringByAppendingPathComponent:@"Desktop/arr2.archive"];
//2.对象归档
BOOL success = [NSKeyedArchiver archiveRootObject:user toFile:targetPath];
if (success) {
NSLog(@"归档成功");
}
else
{
NSLog(@"归档失败");
}
}
//解档
void readStore(User *user)
{
//1.获取路径
NSString *homePath = NSHomeDirectory();
NSString *targetPath = [homePath stringByAppendingPathComponent:@"Desktop/arr2.archive"];
user = [NSKeyedUnarchiver unarchiveObjectWithFile:targetPath];
NSLog(@"%@",[user description]);
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
User *user = [[User alloc] init];
user.age = 23;
user.name = @"dragon";
user.email = @"674806334@qq.com";
user.password = @"123456";
//对象归档
store(user);
//对象解档
readStore(user);
[user release];
}
return 0;
}