在 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