7.数据归档(Archiver)

article/2025/9/16 18:38:47

1.归档的基本概念

  1. 归档: 是指将数据写入文件存储到程序的沙盒中,当再次重新打开程序时,可以还原这些数据. 称它为数据序列化, 数据持久化. 临时数据: 存储在内存中的数据, 程序关闭, 内存释放,数据丢失
  2. 数据持久性的方式
    1) NSKeyedArchiver—-对象归档
    2) NSUserDefaults
    3) 属性列表化(NSArray, NSDictionaty保存文件)
    4) SQlite数据库, Core Data数据库
  3. 归档的形式
    1) 对Foundation库中对象进行归档
    2) 自定义对象进行归档(需要实现归档协议, NSCoding)
  4. 归档后的文件是加密的,属性列表是明文的.
  5. 归档
    1) 使用NSData实例作为归档的存储数据
    2) 添加归档的内容(设置key与value)
    3) 完成归档
    4) 将归档数据存入磁盘中
  6. 解归档
    1) 从磁盘读取文件, 生成NSData实例
    2) 根据Data实例创建和初始化解归档实例
    3) 解归档, 根据key访问value的值
  7. 苹果手机为了保证自己数据上的绝对的安全,设计了沙盒文件(其中有三个文件Documents,Library,tmp),每一个应用程序都配备了自己的沙盒文件,每一次运行,文件夹的名字就会变成一个没有任何规律的字符串
  8. 通过数组获取沙盒路径的方法有三个参数:1). 当前要前往哪一个文件夹,前往documents文件用NSDocumentDirectory,前往caches文件用NSCachesDirectory 2). 访问的文件夹的类型,指定访问是用户文件夹 3). 绝对路劲(YES),相对路劲(NO)–绝对路劲是给系统来使用的,系统可以根据当前的路劲找到文件夹.我们在操作文件的时候都是用绝对路劲,相对路劲只会把要前往的文件夹现实,其他的部分都是~,告诉程序员要去那个文件夹
  9. 沙盒(本质是一个文件夹,名字随机分配)里一共有三个文件:
    1) Documents文件是要是用来存储用户想要存储的一些信息,比如收藏的信息或者自己设置的一些内容,比如我们做的收藏功能就是往这个文件夹里写
    2) Library文件夹是方便程序开发者使用的,主要操作它里面的两个文件夹,caches和Preferences. caches:用来保存缓存文件,SDWebImage会把图片加载到缓存文件中,所以清除缓存功能就是把这个文件夹删除.Preferences一般用来保存程序员设置的信息,比如NSUserDefaults就会把数据保存到这个文件夹中
    3) tmp文件一般存放临时内容,之前版本还有一个.app文件
    这里写图片描述

2.第一种归档方式

main.m文件

**归档对象**
NSString *homepath = NSHomeDirectory();
NSString *path = [homepath stringByAppendingPathComponent:@"archiver2.plist"];
NSMutableData *data = [NSMutableData data];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
NSArray *array = @[@"zhangsam",@"liuyang"];
[archiver encodeObject:array forKey:@"name"];
[archiver encodeInt:100 forKey:@"number"];
[archiver finishEncoding];
BOOL success = [data writeToFile:path atomically:YES];
if (success) {
NSLog(@"success");
}***解归档***
NSString *homepath = NSHomeDirectory();
NSString *path = [homepath stringByAppendingPathComponent:@"archiver2.plist"];
NSData *data = [NSData dataWithContentsOfFile:path];
NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
int number = [unArchiver decodeIntForKey:@"number"];
NSArray *array = [unArchiver decodeObjectForKey:@"name"];
NSLog(@

http://chatgpt.dhexx.cn/article/SSPTerx7.shtml

相关文章

如何用matlab求出矩阵简化阶梯形顺带算出主元所在的列

matlab用rref函数 函数格式 [R,j]rref(A) A是矩阵 R是简化后的阶梯形 j是主元例子:求矩阵A的简化阶梯形与主元所在的列 >> A [1 1 -2 1 4; 2 4 -6 4 8; 2 -3 1 -1 2; 3 6 -9 7 9]; >> [R,j]rref(A)R 1 0 -1 0 40 1 -1 0 …

(线性代数笔记)2.阶梯型矩阵

1.阶梯形矩阵的定义 矩阵的主元 2.任意矩阵经过有限次初等行变换化为阶梯形 这里C是由B通过初等行变化得到的,C也是A的阶梯形 3.矩阵的秩 例题(矩阵通过初等行变换转化为阶梯形)

行阶梯型矩阵,行最简形矩阵,标准形矩阵

行阶梯形矩阵: 行最简形矩阵: 标准形矩阵:

MATLAB--矩阵操作(1.4)

矩阵的逆 >> A*inv(A) ans 1.0000 0 -0.0000 -0.0000 1.0000 -0.0000 -0.0000 0 1.0000 >> norm((ans-eye(3))) ans 1.8620e-15 一个矩阵中行(列)的最大线性无关组的行(列)向量的个…

python 矩阵化为最简阶梯型

from sympy import Matrix import numpy as np原数据是矩阵matrix A_matrix np.array([[1, 0, 0, 0, 1, 0], [1, 0, 0, 0, 0, 1], [0, 1, 0, 1, 0, 0],[0, 1, 0, 0, 0, 1], [0, 0, 1, 1, 0, 0], [0,0,1,0,1,0],[1,1,1,-1,-1,-1]])#系数矩阵,类型matrix# 阶梯行 A…

Python3 矩阵求最简行阶梯矩阵

由于在Python numpy库中没有直接对Matrix求RREF的方法,度娘了好久发现在另一个科学计算包sympy中可以利用A.rref()的方法对Matrix直接求RREF,但是有另一个问题,大家一般常用的是numpy,而sympy和numpy使用的是不同的数据类型&#…

用c语言将一般矩阵化为简化阶梯型

(完整的程序附在文末) 1、问题描述: 用C/C设计一个算法,把矩阵M化为行最简形梯形矩阵A。矩阵A应该满足以下几个条件: 1)若有零行,则零行应在最下方; 2)非零首元(即非零行的第一个不为零的元素&a…

矩阵的行简化阶梯型和标准型

矩阵的行简化阶梯型是一种很有用的与原矩阵等价的矩阵,包括有相同的秩,相同的零空间,以及可以用来求解线性方程组 1 阶梯型矩阵和行简化阶梯型矩阵 下面以上节的方程组开始做初等变换: 由方程组得到增广矩阵 : B 下边对B进行初等变换: B…

阶梯形矩阵(Echelon Matrix)

初等矩阵 定义:与单位矩阵只有微小差别的矩阵。具体来说,就是一个单位矩阵经过一次初等行变换或一次初等列变换后得到的矩阵。 初等变换有下面三种形式: 1,两行(列)互换 2,把某行(…

如何将一个矩阵化为行阶梯形矩阵

2016-03-29 尾巴 线性代数 有同学反映上一课过于冷冰冰,都是一些不带证明的公式。如果线性代数所有公式都要证明的话,线性代数的难度会上好几个量级,有的公式的证明是特别特别难的。还有一个,虽然我们需要大家能对这门课有一些直观…

《线性代数》学习之———第一章 矩阵与方程组(1.2行阶梯形)

1.2行阶梯形矩阵 行阶梯形矩阵相关理论主要的应用还是针对矩阵的不同情况进行化简,因为有些矩阵在化简过程中会出现,系数矩阵的相关行等于0但是对应的增广矩阵相关行不等于0,使出现了违反常理的0实数的情况。 因此,就需要行阶梯形…

修改电脑网段

因为需要远程连接,把自己电脑网段修改一下。 控制面板-网络和Internet-网络连接“右键”-属性-IPv4-自行修改

OpenWrt修改IP网段

修改LAN的IP配置网段 修改此处即可

局域网同一个网段通信过程

局域网内同网段通信的过程 这个时候就需要用到ENSP模拟器了,之前已经安装好了,我们通过ENSP来搭建实验环境,这样可以看到实验的效果以及通过抓包来分享整个过程,先看同网段内的通信过程。 1、准备工作 2、开始测试 我们先用PC1访…

linux 跨网段ping,Linux中跨网段ping问题

问题是这样的,如图,pc的ip是192.168.1.2,设备是linux内核2.6.35,有两个网卡,一个是带外管理口192.168.1.1 一个是192.168.2.1。pc与设备的带外口也就是192.168.1.1相连 将pc的gateway设置为192.168.1.1 pc ping 192.16…

修改docker ip网段

一 问题描述 用docker方式安装完archery后,网络同事反馈该archery服务器的网段和现有网段冲突了,我在archery服务器上,的确发现docker自动生成了几个网卡: #查看docker使用的网卡 [rootArchery ~]# docker network ls NETWORK I…

批量ping网段

ping命令是我们检查网络中最常用的命令,一般常见的场景是去ping一个地址或三四个地址,三四个地址时分别去ping即可,如果碰到50个地址100地址甚至一整段地址,再去一个一个的ping就很麻烦了,我们可以使用一行命令实现批量…

linux服务器如何进入图形界面,linux进入图形界面的方法

安装有图形界面的情况下,启动linux在终端下输入: startx 即可进入X11的图形操作界面。 如果希望每次都自动进入xwindos。。 修改inittab文件。 vi /etc/inittab 找到id:3:initdefault:这行 按i进入编辑模式,将3改为5。 按esc退出编辑。 输入 &#xff1a…

Ubuntu安装图形界面

一、前言 今天更换阿里云操作系统,发现更换的Ubuntu操作系统没有图形界面,在这总结一下Ubuntu安装图形界面的方法! 二、安装图形界面 1、依次执行如下命令行 sudo apt-get update sudo apt-get upgrade -y sudo apt-get install tasksel -…

c语言 图形界面 入门,C语言是怎么实现图形界面的?

GTK就可以,一个基于C语言的免费、开源、跨平台图形工具包,可以直接使用C语言调用实现图形界面开发,下面我简单介绍一下这个工具包的安装和使用,这里以Windows平台为例: 1.首先,下载GTK安装包,这个可以直接到CSDN上下载,一个zip压缩包,直接解压就行,地址https://downl…