iOS NSCoding 與 NSSecureCoding

NSCoding

  • 簡介
    NSCoding是把數(shù)據(jù)存儲在iOS和Mac OS上的一種極其簡單和方便的方式,它把模型對象直接轉(zhuǎn)變成一個文件,然后再把這個文件重新加載到內(nèi)存里,并不需要任何文件解析和序列化的邏輯。
  • 使用
    對象需要實現(xiàn)了NSCoding協(xié)議
// 存儲
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];
  • 實現(xiàn)NSCoding協(xié)議
    需要實現(xiàn)兩個方法
    - (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的系統(tǒng)對象都已經(jīng)升級到支持NSSecureCoding了,如AFNetworking的AFURLSessionManager。

未完待續(xù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容