swift 之归档和解归档

数据持久化的方式有很多种,归档是其中的一种,说起数据持久化的方式,iOS 中基本有以下几种方式:sqlite存储、coredata存储、UserDefault存储、归档、plist存储、还有就是直接写入文件中。 
其实归档也是将数据写入文件中,不同的是,归档是对于“对象”而言的,也就是我们将对象归档之后,归档成一个Data的类型,然后再将其写入文件中,提取的时候直接解归档就能获得想要的对象。 
在用objective-c语言的时候,我想归档和解归档的思路都很清晰,那么在swift中这种思路依然是没有变得,但是有些小细节需要我们注意一下。归档和解归档的一般思路就是: 
1.遵循NSCoding协议,并且实现两个必须的方法 
2.应用NSKeyedArchiver归档一个对象 
3.应用NSUnkeyedArchiver解归档一个对象

    • 用到了三个类和一个协议 
      1>NSCoding协议,这个协议要求我们必须实现两个方法,一个是用来归档的-func encode(with aCoder: NSCoder) {}, 另外一个是用来解归档的方法required init?(coder aDecoder: NSCoder) { 
      super.init() 

      2>其中我们看到用到的一个类-NSCoder:这是一个专门用来归档对象属性和解归档的类 
      3> 还有两个比较重要的类 
      NSKeyedArchiver,这是一个归档类,我们可以使用他去归档一个文件,我们可以用NSKeyedArchiver.archiveRootObject(self, toFile: newPath!) 这个方法直接归档并且存入文件,也可以open class func archivedData(withRootObject rootObject: Any) -> Data 先生成data,然后自己写入文件,我比较喜欢第一种简单方便。 
      NSUnkeyedArchiver,这是一个解归档类,可以用NSKeyedUnarchiver.unarchiveObject(withFile: newPath!)这个方法直接获取OBject 
      需要注意的是:如果对象属性中有基本类型是可选类型的在解归档的时候会crash,告知解归档解出来的类型不是这个基本类型,因为他是可选类型,我的解决办法是如果能不用可选类型就不哟啊用可选类型,给一个初值就好了,或者可以用NSNumber对象的可选类型

swift 之归档和解归档的更多相关文章

  1. iOS:文件归档和解归档的详解和使用

    文件归档和解归档: 用途: 所谓文件归档,就是把需要存储的对象数据存储到沙盒的Documents目录下的文件中,即存储到了磁盘上,实现数据的持久性存储和备份.解归档,就是从磁盘上读取该文件下的数据,用 ...

  2. 【IPHONE开发-OBJECTC入门学习】对象的归档和解归档

    转自:http://blog.csdn.net/java886o/article/details/9046967 #import <Foundation/Foundation.h> #im ...

  3. iOS 数据存储 - 归档和解归档

    这里的归档主要是用于自定义类的归档和解档.我们这里使用NSKeyedArchiver和NSKeyedUnarchiver来归档和解档. 注意:自己定义的类需要实现<NSCoding>,如: ...

  4. 利用Runtime对Ivar实例变量进行共用的归档和解档方式

    一.介绍 在OC中每一个对象持有的变量都是实例变量,实例变量包括成员变量和属性变量,在runtime中用Ivar表示对象的实例变量.其实,runtime源码中可以看到,Ivar也是一个结构体(基本上在 ...

  5. (转载)OC学习篇之---归档和解挡

    前几篇文章说到了OC中的Foundation框架,今天我们来看一下OC中的一个重要知识点:归档 OC中的归档就是将对象写入到一个文件中,Java中的ObjectInputStream和ObjectOu ...

  6. 【IOS学习基础】归档和解档

    一.归档介绍 1.归档是指用某种格式来保存一个或多个对象,以便以后还原这些对象的过程.归档是将数据持久化的一种方式(所谓数据持久化,就是指在IOS开发过程中,将数据保存到本地,能够让程序的运行更加流畅 ...

  7. iOS基础知识之归档和解档

    归档和解档:即将数据写入文件和从文件中读取数据. 此处以plist文件为例说明, 一.plist文件使用时的注意事项: 1.plist文件中仅支持写入Array,Dictionary,Boolean, ...

  8. OC 归档和解档

    #import <Foundation/Foundation.h> #define PATH @"/Users/mac/Desktop/file.txt" int ma ...

  9. OC学习篇之---归档和解挡

    今天我们来看一下OC中的一个重要知识点:归档 OC中的归档就是将对象写入到一个文件中,Java中的ObjectInputStream和ObjectOutputStream来进行操作的.当然在操作的这些 ...

随机推荐

  1. 32位系统装4G以上的内存

    1.操作系统在32位平台上最大寻址空间是4GB,如果要使用4GB以上的内存,就必须使用intel的PAE(物理地址扩展)模式,在windows NT平台实现PAE只需对boot.ini加上/pae即可 ...

  2. 程序员之殇 —— (Are you afraid of me? Don't be.)灵感=神秘感

    Are you afraid of me? (你们怕我吗?) Don't be.(不用怕) I am a programmer who just won't die.(我是不会死的程序员) 自从跟踪到 ...

  3. wpf图片浏览器,实现缩放平移操作图片切换等功能

    wpf经常要用到控件来查看图片,尤其是高清图片,于是做了一个例子: 1.定义图片的队列,用list来存. private readonly List<string> files; 2.切换 ...

  4. Python之Django rest_Framework(3)

    补充:  为什么要前后端分离:       a.因为前端它有自己框架,这样它的效率就非常高       b.不做前后端分离,公司如果既有客户端,又有app这种情况下你就的写两遍 django rest ...

  5. iOS-RAC从新手开始

    什么是RAC? 其实RAC就是一个简化代码的第三方库ReactiveCocoa,直接用Cocoapods添加到项目里就可以, podfile 文件添加 pod 'ReactiveCocoa',然后终端 ...

  6. IDEA tomcat启动异常 org.apache.catalina.startup.ContextConfig parseWebXml

    启动Tomcat发现有异常,总是无法启动,具体的异常日志为下图 具体的解决方法为:在tomcat的conf/content.xml中加上<Loader delegate="true&q ...

  7. 洛谷 [P2661] 信息传递

    求有向图的权值为一的最小环 并查集做法 维护一个dis[],表示i号元素到fa[i]的距离. 对于输入的每两个点u,v,询问这两个点的fa[]是否相同,如果相同就成环,维护最小值,mi=min(mi, ...

  8. POJ2318 TOYS[叉积 二分]

    TOYS Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14433   Accepted: 6998 Description ...

  9. BZOJ 2083: [Poi2010]Intelligence test [vector+二分]

    2083: [Poi2010]Intelligence test Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 469  Solved: 227[Su ...

  10. linux常用命令(不断更新)

    睡眠命令(第一步可省去): 1.查看你的系统支持什么模式:cat /sys/power/state(我的系统为:freeze mem disk) 2.切换到管理员模式下,执行命令:echo " ...