欢迎来到风尚网
风尚网首页 > 首页 > 阅读 > iOS开发之归档

iOS开发之归档

作者:涅槃广广 2016-02-19 09:12 来源:简书 编辑:美朵

文章摘要
前言归档:将对转序列化成二级制数据,并保存在文件中。解归档:将归档后的数据反序列化成明码(能够看懂)对象,供我们使用。说明:只有遵守了NSCoding或NSSecureCoding(更为安全的归档协议,想要深入了解可以留下评论)协议,并且实现了协议里归档与解归档的方法的的类创建的对象才能够进行归档。//归档时会自动调用encodeWithCoder:(NSCoder*)aCoder-(void)encodeWithCoder:(NSCoder*)aCoder//解归档的时候会自动调用initWithCod

前言

  • 归档:将对转序列化成二级制数据,并保存在文件中。

  • 解归档:将归档后的数据反序列化成明码(能够看懂)对象,供我们使用。

  • 说明:只有遵守了NSCoding或 NSSecureCoding(更为安全的归档协议,想要深入了解可以留下评论)协议,并且实现了协议里归档与解归档的方法的的类创建的对象才能够进行归档。

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

将单个对象归档与解归档

将单个对象归档与解归档

  1. 看不懂是怎么找路径给path赋值的,请移步这里查看。

  2. 采用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);
     }

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

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

  1. Person是我自定义的一个类
  2. 在前言部分咱们说过只有遵守了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

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

同时将多个系统类创建的对象归档与解归档

  1. 你自己可以试试在这里也将自定义的Person类给归档。

小主,按键盘右方向键 → 翻页可以跳过片头呢

  

上一篇:iOS开发之Cocoapods

  

下一篇:iOS开发之时间日期NSDate

  

本文标题:iOS开发之归档

原文链接:http://i.she.vc/27765.html

和本文相似的内容:

    点击排行