美文网首页
iOS 文件缓存(NSKeyedArchiver、Codabel

iOS 文件缓存(NSKeyedArchiver、Codabel

作者: 不动科气坏了 | 来源:发表于2019-05-05 17:04 被阅读0次

    在使用swift5进行对象的硬盘缓存时,遇到问题不明白,做简单记录。

    环境

    在OC中, 对象实现NSCoding协议,使用NSKeyedArchiver进行对象解归档即可,也未遇到什么问题。(实际应用更简单,使用MJExtension,这个库为model做了很多事情)

    swift中,项目中对象都是struct,而NSCoding协议需要继承NSObject,而在swift4为我们提供了Codable协议遵循(发现这点后,我将项目中的SwiftJSON替换掉了)使用起来也很是简单:(当然这也是最简单的情况,暂时只考虑与后台匹配的情况)

    model

    将后台传回的data转为对象:

         self.model =tryJSONDecoder().decode(User.self, from: modelData)    

    而在使用NSKeyedArchived时,发现依然不能直接归档对象(不太明白),Codable 说好无缝接入的呢

    - 将对象archiveData传入:

    对象归档到文件

    -将对象data直接写入文件:

    对象编码保存到文件

    这两种方式都是将对象的data类型保存到文件中,但是转换为data的方式不同

    直接encode保存在文件中的是对象的data string,而NSKeyedArchiver.archivedData(withRootObject: user, requiringSecureCoding:false)会报错    

    __SwiftValue encodeWithCoder:]: unrecognized selector

    很明显只有class才可以遵循NSCoding然后使用NSKeyedArchive

    NSKeyedArchive 实际是将对象保存在plist中  我不太明白直接将对象的data string保存在文件与archive到plist中有什么劣势呢,实际上直接写入文件比plist占用空间小。将model转为Data倒是可以archive ,但这样是否有意义。要不要将model改为class不再使用struct。我看到网上swift建议使用struct来定义model,他们都不用这种方式本地化存储的吗,有的话这个问题是怎样解决的,网上没有搜到答案真是让人头大。

    相关文章

      网友评论

          本文标题:iOS 文件缓存(NSKeyedArchiver、Codabel

          本文链接:https://www.haomeiwen.com/subject/emccoqtx.html