归档的概念和用法

2023-10-26

归档的概念和用法

概念:对象归档是指将对象写入文件保存在硬盘的文件内,当在次打开程序时,可以还原这些对象。

也可以称为对象序列化、对象持外化。


数据持久化的方式:

    1> NSKeyedArchiver --- 对象归档

    2> NSUserDefaults

        NSUserDefaults 只支持: NSString, NSNumber, NSDate, NSArray, NSDictionary.

        NSUserDefaults 是个plist文件,建议只是简单快速地保存小型数据,正如其名 -用户的设置。

    3> 属性列表化 (NSArrayNSDictionary保存文件)

    4> SQLite 数据库、Core Data 数据库


归档的形式:

    1>  Foundation 库中对象进行归档

    2> 自定义对象进行归档 (需要实现归档协议、NSCoding)


归档后的文件是加密的、属性列表是明文的。


//

//  main.m

//  ArchiverDemo


#import <Foundation/Foundation.h>


int main(int argc, const char * argv[])

{


    @autoreleasepool {

        

        /**

         * 第一种方式

         * 实现一个数组的序列化和反序列化

         * 一个序列化对象只能序列化一个对象到指定的文件中。

         */

        

        // 序列化 数组归档

        NSArray *array = @[@"abc",@"123",@123456];

        NSString *homePath = NSHomeDirectory();

        NSString *path = [homePath stringByAppendingPathComponent:@"archiveDemo.archive"];

        

        BOOL sucess = [NSKeyedArchiver archiveRootObject:array toFile:path];

        if (sucess)

        {

            NSLog(@"archive sucess");

        }

        

        // 反序列化 解归档

        NSArray *array1 = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

        NSLog(@"%@", array1); 

    }

    return 0;

}


//

//  main.m

//  ArchiverDemo


#import <Foundation/Foundation.h>


int main(int argc, const char * argv[])

{


    @autoreleasepool {

        /**

         * 第二种方式

         * 一个基本数据类型和一个object-C对象类型,进行对象归档和解归档。

         * 可以序列化多个对象

         */

        

        // 序列化

        NSString *homePath = NSHomeDirectory();// 获取当前路径

        // 生成归档文件

        NSString *filePath = [homePath stringByAppendingPathComponent:@"test.archive"];

        // 创建 NSMutableData 对象

        NSMutableData *data = [NSMutableData data];

        // 创建归档对象

        NSKeyedArchiver *archive = [[NSKeyedArchiver allocinitForWritingWithMutableData:data];

        // 归档数据

        NSArray *array = @[@"jack"@"tom"];

        [archive encodeFloat:50 forKey:@"weight"];

        [archive encodeObject:@"jack" forKey:@"name"];

        [archive encodeObject:array forKey:@"array"];

        [archive finishEncoding];

        // 生成文件

        [data writeToFile:filePath atomically:YES];

        

        // 反序列化

        NSData *content = [NSData dataWithContentsOfFile:filePath];

        NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver allocinitForReadingWithData:content];

        float weight = [unarchiver decodeFloatForKey:@"weight"];

        NSString *name = [unarchiver decodeObjectForKey:@"name"];

        NSArray *array1 = [unarchiver decodeObjectForKey:@"array"];

        NSLog(@"weith:%0.2f, name:%@, array1:%@", weight, name, array1);

        

    }

    return 0;

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

归档的概念和用法 的相关文章

  • 【线程池上篇】4种常用线程池介绍

    一 线程池介绍 概念 使用原因 线程池就是提前创建好一些线程放在一起的集合 线程池的工作模式时拿到任务后在自己的池子里找看谁闲着 这个活就让谁去干 多线程模式下 系统需要不断地启动和关闭新线程 这个过程不但消耗资源而在存在线程间过渡的不安全
  • C 程序结构

    原文链接 https www runoob com cprogramming c program structure html 在我们学习 C 语言的基本构建块之前 让我们先来看看一个最小的 C 程序结构 在接下来的章节中可以以此作为参考
  • 通过python技术获取甲流分布数据

    近期 多地学校出现因甲流导致的班级停课 儿科甲流患者就诊量呈数倍增长 此轮甲流为何如此严重 感染甲流之后会出现哪些症状 经过专家的介绍甲流之所以这么严重有这些原因导致的 一 疫情完全放开后很多孩子不戴口罩了 预防流感的作用会下降 二是 免疫
  • background-position的向右对齐用法

    一直只知道background position x轴位置 y轴位置 如果靠近左边偏移7px就写成background position 7px 20px 这样的 但是像右要怎么办 以前我是傻傻的给父容器计算了宽度 然后就向左偏移固定的宽度
  • 为什么推荐科研工作使用git

    为什么推荐科研工作使用git 每个人都会犯错 而使用Git 的最大好处就在于 几乎在所有的情况下你都能 撤消 你的错误操作 比如如果你忘记了把一个小小的改动包含进来 因此你要改正你的上个提交 又或者你想要撤销一个完整的提交 因为这个功能有可
  • 【C/C++】获取计算机CPUID序列号

    1 GetGPUId h文件 pragma once include
  • 【解决报错】c#使用ManagedWifi报错出现“不能作为非托管结构进行封送处理;无法计算有意义的大小或偏移量。”

    最近在做C 上位机wifi通信的时候使用了MangedWifi库 但这个库并没有想象中好用 遇到了不少问题 首先网上流传的例程又不能运行 再接着当wifi断开或连接时会异常退出的bug 通过反反复复的调试后 我最终确认了错误的来源 发现是M
  • 微信公众号 config:fail,Error: 系统错误,错误码:1

    微信公众号开发 微信开发者工具 打开调试模式 出现config fail Error 系统错误 错误码 1 查看一下wx config是否成功渲染了 重新赋值 修改后的代码如下 chooseImage var this this 新增代码块
  • 生产环境lvm磁盘扩容!!!

    一次就好 亲身体验生产环境lvm磁盘扩容 这一天体验了真正的生产环境 三急 中午客户打电话说报表几个小时没更新了 是不是你们系统有问题啊 于是开始排除发现磁盘空间满了 需要进行扩容 咱又没有扩容经验潜心研究一下午 终于得出结论 以下将描述我
  • 如何将计算机的硬盘分割,电脑硬盘如何快速分区

    电脑硬盘一般有2个盘或者4个盘 怎样自己增添一个硬盘 或者来均分电脑那300G或者500G的硬盘空间呢 今天学习啦小编给大家介绍下电脑硬盘如何快速分区吧 电脑硬盘快速分区方法一 1 点击我的电脑 点击鼠标右键 选择管理项 2 打开后选择磁盘
  • Python基础教程,Python入门教程(非常详细)

    Python 英文本意为 蟒蛇 直到 1989 年荷兰人 Guido van Rossum 简称 Guido 发明了一种面向对象的解释型编程语言 后续会介绍 并将其命名为 Python 才赋予了它表示一门编程语言的含义 图 1 Python
  • C# TCPclient 服务器保持长连接的一种办法(变相的心跳包功能)

    本文章向大家介绍C TCPclient 服务器保持长连接的一种办法 变相的心跳包功能 主要包括C TCPclient 服务器保持长连接的一种办法 变相的心跳包功能 使用实例 应用技巧 基本知识点总结和需要注意事项 具有一定的参考价值 需要的
  • neo4j从安装到远程访问一气呵成

    从安装到远程访问配置 安装Java JDK JDK下载 JDK配置环境 安装Neo4j Neo4j下载 系统变量设置 通过控制台启动 Neo4j 注册 Neo4j 服务 启动 Neo4j 服务 停止 Neo4j 服务 重启 Neo4j 服务
  • 【千律】C++基础:类的派生与继承

    include
  • postman环境设置

    本来是想在另一篇博客基础上接着写的 但是考虑到不想搞太长 干脆分开写 看起来更直接清楚一下 使用postman调接口 经常会遇到不同的的环境 但是接口是一样的 不想添加太多没用的请求 因为除了同一个接口请求要写多遍 更重要的是环境地址和端口
  • gprmax3.0安装、GPU加速(cuda)配置、通过python使用gprmax的问题

    gprmax3 0安装 GPU加速 cuda 配置 通过python使用gprmax的问题 一 安装过程 二 通过NVIDIA CUDA使用GPU加速功能 三 通过VS2019或VScode操纵gprmax 鉴于网上其他教程版本较低 本篇记
  • 【GD32篇】驱动AD7616完成数据采集

    1 AD7616介绍 1 1 概述 AD7616 是一款 16 位 DAS 数据采集系统 支持对 16 个通道进行双路同步采样 AD7616 采用 5 V 单电源供电 可以处理 10 V 5 V 和 2 5 V 真双极性输入信号 同时每对通
  • 代码随想录算法训练营第三天

    今天是算法训练营的第三天 写了454 四数相加 II这道题目 力扣链接 代码随想录链接 代码如下 class Solution def fourSumCount self nums1 List int nums2 List int nums
  • 在window模式下硬盘安装linux

    随着linux的迅速发展和其强大的安全体系的成熟 越来越多的人希望能学习linux 但也有不愿很快的离开window那中友好的界面 最好的办法就是在你的PC机上做两个系统 这样就可以学习和娱乐两不误 等到自己在linux上学习的狠命熟练的时
  • Android APK 程序实现自动更新,java服务命令处理无弹窗,终极解决方案

    安卓更新方式 网上五花八门 但是真正实现apk自动更新无痕迹的方式 少之又少 毕竟不要钱的方式 稳定的方式才能让开发者在困难中脱颖而出 安卓程序如何做到自动更新 安卓程序如何实现无弹框更新 1 安卓apk自动更新方式 a 第三方平台更新ap

随机推荐

  • 无向图有向图最小环

    floyd求 for int k 1 k lt n k for int i 1 i
  • 合肥先进光源高速数据采集网的规划

    合肥先进光源束测后台的初步设计 这里的网络相关的部分摘出来换个名字重新整理一下 合肥光源中 没有把数据量大的设备比如摄像头 示波器规划进单独的网络 所有的设备都直接接入控制网 运行实践的过程中 有过高帧率的一个摄像头就拖慢整个网络响应的情况
  • Java基础11--时间日期

    Java基础11 时间日期 文章目录 Java基础11 时间日期 获取当前日期时间 日期比较 使用 SimpleDateFormat 格式化日期 日期和时间的格式化编码 解析字符串为时间 Java 休眠 sleep Calendar类 Ca
  • I/O多路复用(select、poll、epoll)

    基本思想 1 先构造一张有关文件描述符的表 然后使用我们的select poll epoll函数 2 我们的应用程序会将这张表复制给内核 3 内核层初始化表中的需要检测的描述符 4 当检测到有文件操作时 则立即将文件描述符作为标志并返回给应
  • Pytorch profiler with tensorboard.

    文章目录 前言 你将学到什么 一 准备数据集和模型 二 使用profiler来记录执行的事件 三 执行profiler 四 使用TensorBoard来观察结果并对模型性能做出分析 最后 总结 前言 你将学到什么 注意 以下所有的内容均来自
  • innerHTML的作用及用法。

    对innerHTML的用法有些模糊 今天来总结一下 1 innerHTML有两个作用 1 获取对象的内容 2 向对象插入内容 例 这是内容 由于id是唯一的 我们可以不获取id 通过 a innerHTML 来获取id为a的对象的内嵌内容
  • 数据结构学习笔记----排序

    排序 就是要整理表中的元素 使之按关键字递增 或递减 有序排列 如果待排序的表中 存在有多个关键字相同的元素 经过排序后这些具有相同关键字的元素之间的相对 次序保持不变 则称这种 排序算法是稳定的 在排序过程中 若整个表都是放在内存中处理
  • Java8 Stream 之groupingBy 分组讲解

    本文主要讲解 Java 8 Stream之Collectors groupingBy 分组示例 Collectors groupingBy 分组之常见用法 功能代码 使用java8 stream groupingBy操作 按城市分组list
  • day5 qt

    include widget h include ui widget h Widget Widget QWidget parent QWidget parent ui new Ui Widget ui gt setupUi this tim
  • 计算机无法识别荣耀9,华为荣耀9连接不上电脑端华为手机助手怎么处理?

    如果手机无法连接华为手机助手 可通过以下步骤来尝试解决 步骤一 请确认USB线连接是否正常 若手机通知栏中没有显示USB已连接的提示 则可能是USB线连接不正常 手机能充电不能说明USB线是完全连接正常 比如部分USB线仅支持充电不支持数据
  • 独家

    随机森林 概述 当变量的数量非常庞大时 你将采取什么方法来处理数据 通常情况下 当问题非常庞杂时 我们需要一群专家而不是一个专家来解决问题 例如Linux 它是一个非常复杂的系统 因此需要成百上千的专家来搭建 以此类推 我们能否将许多专家的
  • 将线程pid转成16进制_如何使用jstack分析线程状态

    背景 记得前段时间 同事说他们测试环境的服务器cpu使用率一直处于100 本地又没有什么接口调用 为什么会这样 cpu使用率居高不下 自然是有某些线程一直占用着cpu资源 那又如何查看占用cpu较高的线程 当然一个正常的程序员不会写出上述代
  • Spring Cloud中的Ribbon的实现和使用

    Spring Cloud Ribbon 是 Spring Cloud 生态系统中的一个负载均衡客户端 它可以轻松地与其他 Spring Cloud 组件集成 提供负载均衡的方式来访问后端服务 下面介绍 Spring Cloud Ribbon
  • 如何进行远程调试(remote debug)。

    场景 scenario 本地机器 A 重现不了问题 其他机器或其他系统 B 可以重现问题 而重现问题的机器没有装VS调试工具 在开发本地机器中拷贝远程调试工具 以VS 2015 为例 将C Program Files x86 Microso
  • yum错误:Invalid configuration value: failovermethod=priority in /etc/yum.repos.d/CentOS-Epel.repo;

    错误描述 yum install y yum utils device mapper persistent data lvm2 Invalid configuration value failovermethod priority in e
  • 解析优化机器人课程体系与教学策略

    依据 基础教育信息技术课程标准 制定机器人教育课程标准 将机器人教育课程纳入新的课程体系 对现有机器人教育教材进行重新规划和修订 提高机器人教育在中小学阶段课时的比例 同时保证实践课的课时比例 加强学生的动手能力 保证教学质量 除此 还要保
  • 请尽快报名参加Imagine Cup 微软“创新杯”全球学生大赛

    微软Imagine Cup 2013大赛报名即将截止 截止报名时间是2013年1月31日 请各大高校抓紧时间报名参加 CSDN高校俱乐部校区将选出1个校区一等奖 10个校区二等奖 校区一等奖可直接参加中国区半决赛 团队成员还可获得CSDN高
  • VS构建项目报错信息及解决办法04

    报错信息及解决7 报错信息详情 error LNK2001 无法解析的外部符号 symbol 原因 编译后的代码引用或调用符号 该符号未在链接器搜索的任何库或对象文件中定义 什么是未解析的外部符号 符号 是函数或全局变量的内部名称 它是在已
  • 【算法】最优服务次序问题(贪心算法)

    设有n 个顾客同时等待一项服务 顾客i需要的服务时间为 t i 1 lt i lt n 应如何安排n个顾客的服务次序才能使平均等待时间达到最小 平均等待时间是n 个顾客等待服务时间的总和除以n 输入格式 第一行是正整数n 1
  • 归档的概念和用法

    归档的概念和用法 概念 对象归档是指将对象写入文件保存在硬盘的文件内 当在次打开程序时 可以还原这些对象 也可以称为对象序列化 对象持外化 数据持久化的方式 1 gt NSKeyedArchiver 对象归档 2 gt NSUserDefa