美文网首页
iOS 存储的研究

iOS 存储的研究

作者: woniu | 来源:发表于2018-01-10 17:47 被阅读53次

    本文针对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中的数据,我们该怎么办呢,下面我列一个表说明下情况。

    共享keyChain中的值

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

    4、怎么删除keyChain中的数据

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

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

    相关文章

      网友评论

          本文标题:iOS 存储的研究

          本文链接:https://www.haomeiwen.com/subject/wlnonxtx.html