本文针对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中的数据,我们该怎么办呢,下面我列一个表说明下情况。
根据表中情况,只有在相同开发者账号发布的APP且keyChain中设置的参数相同才可以共享keyChain中的数据。
4、怎么删除keyChain中的数据
除了重置手机或者APP代码删除,其他情况例如删除APP、升级系统都不会丢失keyChain中的数据。
keychain部分资料来源-http://blog.csdn.net/zhi_sheng/article/details/51496004