iOS 开发之数据存储

在 iOS 开发中数据的存储可以归纳为两类:一类是存储为文件,另一类是存储为数据库.

存储为文件:

Document 目录:保存应用程序运行时生成的需要持久化的数据.应用自己的数据(比如:游戏进度存档,软件的一些个人设置等).会备份,此目录下保存的相对重要的数据.

tem 目录:

程序运行时所需的临时数据,不会备份,系统管理

Library/Cachas 目录:

保存从网络下载的数据(听歌,图片的缓存),程序员管理清除数据.不会备份,主要保存程序运行时生成的需要持久化的数据,一般存储体积大,不需要备份的非重要数据.

偏好设置: 

 Library/Preference 目录:保存通过"偏好设置"写入的数据. iOS 的 settings 应用会在该目录中查找应用的设置信息,会备份,系统管理,通常用来储存一些基本的软件配置信息,比如记住密码,自动登录等.NSUserDefaults被设计用来存储设备和应用的配置信息,它通过一个工厂方法返回默认的、也是最常用到的实例对象。这个对象中储存了系统中用户的配置信息,开发者可以通过这个实例对象对这些已有的信息进行修改,也可以按照自己的需求创建新的配置项。用来保存应用程序设置和属性、用户保存的数据。

NSKeyedArchiver(归档):

把内存数据转移到闪存中进行持久化的操作称成为归档。内存存储是临时的,运行时有效的,但效率高,而闪存则是一种持久化存储,但产生I/O消耗,效率相对低.NSKeyedArchiver:采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:方法。前一个方法告诉系统怎么对对象进行编码,而后一个方法则是告诉系统怎么对对象进行解码。缺点:归档的形式来保存数据,只能一次性归档保存以及一次性解压。所以只能针对小量数据,而且对数据操作比较笨拙,即如果想改动数据的某一小部分,还是需要解压整个数据或者归档整个数据。

存储为数据库:

SQLite3:

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

SQLite擅长处理的数据类型其实与NSUserDefaults差不多,也是基础类型的小数据,只是从组织形式上不同。开发者可以以关系型数据库的方式组织数据,使用SQL DML来管理数据。 一般来说应用中的格式化的文本类数据可以存放在数据库中,尤其是类似聊天记录、Timeline等这些具有条件查询和排序需求的数据。

无论你采用系统自带的还是用的SQLight第三方库的数据存储本质都数据库存储,没必要再另外分类。数据存储稍微麻烦,并且存储的速度较慢,只有真正需要用到的地方才采用这种方式,如:聊天记录,地图地理信息查询。

Core Data(对 SQLite 的封装):

一个支持持久化的,对象图和生命周期的自动化管理方案。严格意义上说CoreData是一个管理方案,他的持久化可以通过SQLite、XML或二进制文件储存。如官方定义所说,CoreData的作用远远不止储存数据这么简单,它可以把整个应用中的对象建模并进行自动化的管理。他和微软的MFC::CArchive实现对象的持久化和反持久化一样只能支持具有序列化的函数,把对象分解成基本数据类型的持久化,如字符串,整形数字,浮点型数据,字符。由于持久化的对象数据都在一个对象中,所以他利于数据管理。所以采用CoreData存储数据就不需要采用NSUserDefaults数据存储数据了。

分享连接:

http://www.jianshu.com/p/a3eeae99e902

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容