iOS 应用中分析如何使用常用的几种数据存储方式

最近在做一个运动类的app,之前没有用过数据库的小白,记录一下选择数据存储的过程吧!

首先是四种常用数据存储方式的介绍,经过网搜,觉得这篇重点突出,还不错,网址贴出来供参考:http://blog.youkuaiyun.com/Eduora_meimei/article/details/44198579

接下来就是对几种方法的比较筛选了,我搜了所有的数据存储方式,自认比较全了,要是有其他更好的,欢迎留言哦~

先看了一些不同场景的使用方案,根据具体的业务场景,选择 合适的数据存储方式,总结如下:

1.用户首选项

是用来保存和记录用户在操作应用的过程做做出的一些选择或设置,数据是保存在程序全局中的,所以当退出程序后下次再进来时,数据还是存在的,这样就起到了保存用户操作数据的功能。包含两种方法:自定义首选项,使用系统设置的方式。详细讲解链接:http://www.cnblogs.com/wayne23/p/3441898.html,http://blog.youkuaiyun.com/ryantang03/article/details/7768785

(1)  自定义首选项NSUserDefaults) – 这种情况通常不需要用户干预,如游戏通关信息,Video播放记录,或者 App 退出之后,下次进入时,希望恢复到退出时的情况。

(2)  设置束(Settings Bundle)-- 提供了一个通过 iPhone、iPad的设置(Settings)应用程序进行配置的接口。

2.  SQLite 数据库 

是嵌入式的和轻量级的 SQL 数据库,SQLite 是由 C实现的。一般来说应用中的格式化的文本类数据可以存放在数据库中,尤其是类似聊天记录、Timeline等这些具有条件查询和排序需求的数据。

iOS的SDK里预置了SQLite的库,开发者可以自建SQLite数据库。SQLite每次写入数据都会产生IO消耗,把数据归档到相应的文件。

SQLite擅长处理的数据类型其实与NSUserDefaults差不多,也是基础类型的小数据,只是从组织形式上不同。

FMDB:

是对于libsqlite3框架的封装,具有处理并发安全性,更好的处理事务的特性,整个框架非常轻量级但又不失灵活性,也是很多企业开发的首选。

注意:数据库的路径参数一般会选择保存到沙箱中的Documents目录中;如果这个参数设置为nil则数据库会在内存中创建;如果设置为@””则会在沙箱中的临时目录创建,应用程序关闭则文件删除

3.CoreData

官方给出的定义是,一个支持持久化的,对象图和生命周期的自动化管理方案。本质是是使用sqlite 来存储

CoreData优点:能够合理管理内存,避免使用sql的麻烦,高效,面向对象,开发人员不必过多的关心更多数据库操作知识,同时它基于ObjC操作,书写更加优雅等;

CoreData缺点:但是它本身也存在着一定的限制,例如如果考虑到跨平台,则只能选择SQLite,因为无论是iOS还是Android都可以使用同一个数据库,降低了开发成本和维护成本。其次是当前多数ORM框架都存在的性能问题,因为ORM最终转化为SQL操作,其中牵扯到模型数据转化,其性能自然比不上直接使用SQL操作数据库。

从归档文件还原模型时CoreData并不是一次性把整个模型中的所有数据都载入内存,而是根据运行时状态,把被调用到的对象实例载入内存。框架会自动控制这个过程,从而达到控制内存消耗,避免浪费。

4.NSKeyedArchiver

采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:方法。前一个方法告诉系统怎么对对象进行编码,而后一个方法则是告诉系统怎么对对象进行解码。

缺点:归档的形式来保存数据,只能一次性归档保存以及一次性解压。所以只能针对小量数据,而且对数据操作比较笨拙,即如果想改动数据的某一小部分,还是需要解压整个数据或者归档整个数据。

5.  Write写入方式

永久保存在磁盘中。即可以以属性列表的方式保存,属性列表文件是一种XML文件,Foundation框架中的数组和字典等都可以于属性列表文件相互转换。详见http://www.cnblogs.com/wzk89/p/3939782.html。

但是也是需要获得整个数据进行修改。

6.Keychain:

对安全性要求较高的数据。

iOS设备中的Keychain是一个安全的存储容器,可以用来为不同应用保存敏感信息比如用户名,密码,网络密码,认证令牌。苹果自己用keychain来保存Wi-Fi网络密码,VPN凭证等等。它是一个sqlite数据库,位于/private/var/Keychains/keychain-2.db,其保存的所有数据都是加密过的。

开发者通常会希望能够利用操作系统提供的功能来保存凭证(credentials)而不是把它们(凭证)保存到NSUserDefaults,plist文件等地方。保存这些数据的原因是开发者不想用户每次都要登录,因此会把认证信息保存到设备上的某个地方并且在用户再次打开应用的时候用这些数据自动登录。Keychain的信息是存在于每个应用(app)的沙盒之外的。

详见http://my.oschina.net/w11h22j33/blog/206713

7.远端数据库 

这个一般由 App 调用远端的 RESTFul WCF 服务,将JSON或者 XML 数据传递给远端的 Web 服务,读写数据库的逻辑完全在 Web 服 务端实现。比如,用户在iPhone/iPad 终端 App 提交了订单,订单数据当然需要写入远端 SQL Server 或Oracle 数据库

通过比较自己觉得要是数据量不大可以使用Write写入方式来保存,如果相对较大可以使用数据库或者coredata来保存(具体使用讲解可参考http://www.cnblogs.com/kenshincui/p/4077833.html中的例子,我也试过了,成功!)

参考的网址有:http://www.weste.net/2013/3-29/90016.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值