• 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. 归档后的文件是加密的,所以归档文件的扩展名可以随意取
     
     
  • 相关阅读:
    POJ-3176 Cow Bowling
    01背包、完全背包、多重背包
    最后的几天暑假学习
    暑假的学习
    凸包算法(Graham扫描法)详解
    微软版的SqlHelper.cs类
    SQL语句分组排序,多表关联排序
    SQL存储过程分页(通用的拼接SQL语句思路实现)
    增加删除字段修改字段名,修改表结构,非常用SQL语句技巧总结
    Asp.net mvc返回Xml结果,扩展Controller实现XmlResult以返回XML格式数据
  • 原文地址:https://www.cnblogs.com/mantgh/p/4346822.html
Copyright © 2020-2023  润新知