iOS开发-归档

前言

归档:将对转序列化成二级制数据,并保存在文件中。
解归档:将归档后的数据反序列化成明码(能够看懂)对象,供我们使用。

说明:只有遵守了NSCoding或 NSSecureCoding协议,并且实现了协议里归档与解归档的方法的的类创建的对象才能够进行归档。

  //归档时会自动调用encodeWithCoder:(NSCoder *)aCoder
  - (void)encodeWithCoder:(NSCoder *)aCoder

  // 解归档的时候 会自动调用 initWithCoder:(NSCoder *)aDecoder
  - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder

将单个对象归档与解归档

将单个对象归档与解归档

采用archiveRootObject方法在同一路经下只能归档一个对象。但如果此时我想将我传进来的名字和年龄都归档,只需将这两个数据放到一个字典对象里。让后将字典给归档便可。将归档方法变为如下即可。

- (void)archiverName:(NSString *)name WithAge:(NSNumber *)age {

 //[NSKeyedArchiver archiveRootObject:name toFile:path];

 //[NSKeyedArchiver archiveRootObject:age toFile:path];

 NSMutableDictionary *dict = [NSMutableDictionary dictionary];

 dict[@"name"] = name;
 dict[@"age"] = age;

 [NSKeyedArchiver archiveRootObject:dict toFile:path];

 //验证是否将字典给归档
 id content =  [NSKeyedUnarchiver unarchiveObjectWithFile:path];
 NSLog(@"%@",content);
 }

对自定义的类的单个对象创建的对象归档与解归档

对自定义的类的单个对象创建的对象归档与解归档
Person是我自定义的一个类
在前言部分咱们说过只有遵守了NSCoding或NSSecureCoding(更为安全的归档协议,想要深入了解可以留下评论)协议,并且实现了协议里归档与解归档的方法的的类创建的对象才能够进行归档。

因此我们需要对Person类做以下操作。

遵守NSCodeing协议(暂不考虑NSSecureCoding)

  • 实现-(void)encodeWithCoder:(NSCoder *)aCoder;
  • 实现-(nullable instancetype)initWithCoder:(NSCoder *)aDecoder;

Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject<NSCoding>

@property (nonatomic,copy) NSString *name;
@property (nonatomic,assign) NSInteger age;
@property (nonatomic,copy) NSString *sex;

@end

Peroson.m

#import "Person.h"

@implementation Person

//被归档的时候会调用者方法,aCoder就是归档时传过来的归档对象
- (void)encodeWithCoder:(NSCoder *)aCoder{

     [aCoder encodeObject:self.name forKey:@"name"];
     [aCoder encodeInteger:self.age forKey:@"age"];
     [aCoder encodeObject:self.sex forKey:@"sex"];
}

//解归档的时候会调用这个方法
- (instancetype)initWithCoder:(NSCoder *)aDecoder{

//解归档时会产生一个Person对象,这里是给这个Person对象赋值。
   self = [super init];
   if (self) {
       self.name = [aDecoder decodeObjectForKey:@"name"];
       self.age = [aDecoder decodeIntegerForKey:@"age"];
       self.sex = [aDecoder decodeObjectForKey:@"sex"];
            }
      return self;
   }
@end

同时将多个的对象归档与解归档

同时将多个的对象归档与解归档

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值