• iOS开发笔记-swift实现iOS数据持久化之归档NSKeyedArchiver


    IOS数据持久化的方式分为三种:

    1. 属性列表 (plist、NSUserDefaults)
    2. 归档 (NSKeyedArchiver)
    3. 数据库 (SQLite、Core Data、第三方类库等

    归档(又名序列化),把对象转为字节码,以文件的形式存储到磁盘上;程序运行过程中或者当再次重写打开程序的时候,可以通过解归档(反序列化)还原这些对象。本文主要介绍swift实现iOS数据归档。

    归档Foundation框架对象

    复制代码
    func archiveData(){
            var path: AnyObject=NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0]
            var filePath=path.stringByAppendingPathComponent("data.archive")
            //归档
            var array=["Bill Gates","Steve Jobs"]
            if(NSKeyedArchiver.archiveRootObject(array, toFile: filePath)){
                NSLog("Archive Success")
            }
        }
        func unarchiveData(){
            var path: AnyObject=NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0]
            var filePath=path.stringByAppendingPathComponent("data.archive")
            //反归档
            var data=NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as NSArray
            NSLog("%@", data)
        }
    复制代码

    小结:

    1. 归档和解归档操作步骤简单
    2. 一次只能归档一个对象,如果是多个对象归档需要分开进行
    3. 归档的对象是Foundation框架中的对象
    4. 归档和解归档其中任意对象都需要归档和解归档整个文件
    5. 归档后的文件是加密的,所以归档文件的扩展名可以随意取
     
    归档自定义数据
     
    复制代码
            var path=NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as NSString
            var filePath=path.stringByAppendingPathComponent("data.archive")
            //归档
            var data=NSMutableData()
            var archiver=NSKeyedArchiver(forWritingWithMutableData: data)
            archiver.encodeObject(["Bill Gates","Steve Jobs"], forKey: "data");
            archiver.encodeInt(32, forKey: "age");
            archiver.encodeObject("test message", forKey: "tip");
            archiver.finishEncoding()
            data.writeToFile(filePath, atomically: true)
             //反归档
            var unarchiveData=NSData(contentsOfFile: filePath)
            var unarchiver=NSKeyedUnarchiver(forReadingWithData: unarchiveData!)
            var decodeData=unarchiver.decodeObjectForKey("data") as NSArray
            var decodeAge=unarchiver.decodeIntForKey("age")
            var decodeTip=unarchiver.decodeObjectForKey("tip") as NSString
            NSLog("data=%@,age=%i,tip=%@",decodeData,decodeAge,decodeTip)
    复制代码

    小结:

    1. 在带键的归档中,每个归档字段都有一个key值,解归档时key值要与归档时key值匹配
    2. 带键归档可以一次存储多个对象
    3. 归档的对象是Foundation框架中的对象
    4. 归档和解归档其中任意对象都需要归档和解归档整个文件
    5. 归档后的文件是加密的,所以归档文件的扩展名可以随意取
     http://www.cnblogs.com/mantgh/p/4346822.html
  • 相关阅读:
    Linux-C基础知识学习:C语言作业-将5个学生成绩保存在一个数组中,单独实现一个计算平均成绩的average函数, 在main函数中获取该函数返回的平均值,并打印。
    Linux-C基础知识学习:C语言作业-输入两个数,将两个数交换,按升序输出。
    C语言学习:结构体(笔记)--未完待续
    C语言学习:结构体(笔记)
    PHP之函数
    PHP之流程控制
    PHP之常量和变量
    PHP之数据类型
    PHP之标记风格和注释
    VMware虚拟机中各类文件作用详解
  • 原文地址:https://www.cnblogs.com/cmblogs/p/4562920.html
Copyright © 2020-2023  润新知