iOS 存储的研究

本文针对iOS两种存储做较为深入的分析

一、iOS存储数据的原则

1、一般从网上下载的那些内容,包括杂志、报纸、视频什么的,都要放在/Library/Caches目录下面。

2、Library目录下面的内容,也会被被iTunes备份,但是Caches目录除外,也就是说这些网络下载内容文件放在这里是不会被备份的。

3、Library/Caches目录下,一般情况下是不会被删除的,我理解,也包括stackoverflow网友的证明,应用升级的时候也不会被删除,实际上,应用升级的具体系统操作是这样的:在升级的APP的时候,系统会新建一个应用目录,然后再把旧版本的数据拷贝过来,之后再删除旧版本的应用安装目录。

注意:Library/Caches目录下的内容一般不会被删除,但是在系统恢复和其他情况下(比如磁盘空间较低,系统自动清理数据的时候)会被清楚,所以你的程序每次都要检查一下,这些文件还在不在了,不在的话只能重新下载了。

资料来源:http://blog.csdn.net/u011404663/article/details/49615965

二、NSUserDefault存储数据

1、账号密码确实不要使用NSUserDefault 保存,测试包可以使用iFunBox轻松从windows电脑导出沙河文件,userdefault 文件看得一清二楚啊。

2、APP升级之后,NSUserDefault中的数据依然保存,不会被删除掉。

三、keyChain存储数据

定义:是一个安全的存储容器,可以用不同的应用保存敏感信息,比如用户名,密码、网络密码、认证令牌等。他是一个sqlite数据库,位于/private/var/Keychains/keychain-2.db,其保存的所有数据都是加密过的。keyChain中的信息存储在每个应用的沙盒之外的,所以不会随着应用的删除、升级或者系统的升级被删除掉。

1、从Keychain中导出数据的最流行工具是ptoomey3的Keychain dumper。

2、KeyChain相关参数

秘钥类型键CFTypeRef kSecClass,包含一下五种秘钥键。

//CFTypeRef kSecClassGenericPassword //一般密码

//CFTypeRef kSecClassInternetPassword //网络密码

//CFTypeRef kSecClassCertificate //证书

//CFTypeRef kSecClassKey //密钥

//CFTypeRef kSecClassIdentity //身份证书(带私钥的证书)

3、怎样在不同的APP中共享keyChain中的数据呢?

首先keyChain中的数据存储是和字典相同的key/value的形式,如果不同的APP要共用keyChain中的数据,我们该怎么办呢,下面我列一个表说明下情况。


iOS 存储的研究_第1张图片
共享keyChain中的值

根据表中情况,只有在相同开发者账号发布的APP且keyChain中设置的参数相同才可以共享keyChain中的数据。

4、怎么删除keyChain中的数据

除了重置手机或者APP代码删除,其他情况例如删除APP、升级系统都不会丢失keyChain中的数据。

keychain部分资料来源-http://blog.csdn.net/zhi_sheng/article/details/51496004

你可能感兴趣的:(iOS 存储的研究)