iOS-数据源存储方式三之归档、解档

归档、解档:说白了就是把对象保存在文件,和从文件中读取对象。

缺点:只能一次性归档保存,以及一次性解压。每次改动数据,都要解压整个数据,然后还要归档保存。倘若你当前归档时,文件有100个对象,此时想改动这个文件添加对象,那么必须要解档拿出这100个对象,然后再添加,然后再归档,这样处理性能很低。

苹果目前严格控制移动设备上的归档处理,不能有大量压缩的文件。

归档的类需要遵守NSCoding协议

//
//  ViewController.m
//  NSKeyedArchiver
//
//  Created by HZhenF on 2017/5/31.
//  Copyright © 2017年 Huangzhengfeng. All rights reserved.
//

#import "ViewController.h"
#import "Person.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    NSLog(@"%@",NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]);

    Person *p = [[Person alloc] init];
    p.name = @"HZhenF";
    p.age = 21;


    NSString *currentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
    NSString *filePath = [currentPath stringByAppendingPathComponent:@"person.data"];
    //将对象归档
    [NSKeyedArchiver archiveRootObject:p toFile:filePath];

    //将对象解档
    Person *unarchiverPerson = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
    NSLog(@"%@",unarchiverPerson);

}


@end
//
//  Person.h
//  NSKeyedArchiver
//
//  Created by HZhenF on 2017/5/31.
//  Copyright © 2017年 Huangzhengfeng. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Person : NSObject<NSCoding>

@property(nonatomic,strong) NSString *name;

@property(nonatomic,assign) int age;

-(NSString *)description;

@end
//
//  Person.m
//  NSKeyedArchiver
//
//  Created by HZhenF on 2017/5/31.
//  Copyright © 2017年 Huangzhengfeng. All rights reserved.
//

#import "Person.h"

@implementation Person

-(NSString *)description
{
    return [NSString stringWithFormat:@"name = %@----age = %d",self.name,self.age];
}

//归档
-(void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeInt:self.age forKey:@"age"];
}

//解档
-(instancetype)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super init]) {
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.age = [aDecoder decodeIntForKey:@"age"];
    }
    return self;
}

@end

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值