iOS NSCoding 与 NSSecureCoding

NSCoding

  • 简介
    NSCoding是把数据存储在iOS和Mac OS上的一种极其简单和方便的方式,它把模型对象直接转变成一个文件,然后再把这个文件重新加载到内存里,并不需要任何文件解析和序列化的逻辑。
  • 使用
    对象需要实现了NSCoding协议
// 存储
Teacher *t = [[Teacher alloc] init];
t.name = [NSMutableString stringWithString: @"李刚"];
t.age = 40;
t.className = @"English";

[NSKeyedArchiver archiveRootObject:t toFile:_file];

// 读取
Teacher *t = [NSKeyedUnarchiver unarchiveObjectWithFile:_file];
  • 实现NSCoding协议
    需要实现两个方法
    - (void)encodeWithCoder:(NSCoder *)aCoder;
    - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder;
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    self = [super init];
    if (self) {
        self.name = [aDecoder decodeObjectOfClass:[NSMutableString class] forKey:NSStringFromSelector(@selector(name))];
        self.age = [[aDecoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(age))] unsignedIntegerValue];
        self.className = [aDecoder decodeObjectOfClass:[NSString class] forKey:NSStringFromSelector(@selector(className))];
    }
    return self;
}

- (void)encodeWithCoder:(NSCoder *)aCoder {
    [aCoder encodeObject:self.name forKey:NSStringFromSelector(@selector(name))];
    [aCoder encodeObject:[NSNumber numberWithUnsignedInteger:self.age] forKey:NSStringFromSelector(@selector(age))];
    [aCoder encodeObject:self.className forKey:NSStringFromSelector(@selector(className))];
}

NSSecureCoding

  • 简介
    NSSecureCoding是NSCoding的变种,因为NSCoding毕竟不太安全,大部分支持NSCoding的系统对象都已经升级到支持NSSecureCoding了,如AFNetworking的AFURLSessionManager

未完待续

推荐阅读更多精彩内容

  • NSCoding NSCoding是把数据存储在iOS和Mac OS上的一种极其简单和方便的方式,它把模型对象直接...
    丘名山阅读 62评论 0 0
  • 概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据。在iOS开发中,...
    Leeson1989阅读 569评论 4 1
  • NSCoding1、为了将应用数据存储到硬盘中,iOS提供基本的文件API、Property List序列化、SQ...
    iOS_愛OS阅读 1,232评论 0 0
  • 转载自:http://www.mamicode.com/info-detail-957988.html 1、iOS...
    哆啦_阅读 1,247评论 0 2
  • 前言 归档:将对转序列化成二级制数据,并保存在文件中。 解归档:将归档后的数据反序列化成明码(能够看懂)对象,供我...
    Ming普阅读 162评论 0 3