Object-C 学习笔记(三十)--- 归档(3)---对象归档

对象归档:把对象的数据归档到文件上,编程一种有结构型的文件数据,实现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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值