iOS开发中的数据存储方式

数据存储的核心都是写文件。

在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题。将数据保存到本地,能够让程序的运行更加流畅,不会出现让人厌恶的菊花形状,使得用户体验更好。下面介绍一下数据保存的方式:

主要的工具有:** NSKeyedArchiver,NSUserDefaults,Write写入方式,SQLite/CoreData **

一、NSKeyedArchiver

对象序列化(对象归档):对象序列化通过序列化的形式,键值关系存储到本地,转化成二进制流。可通过runtime实现自动化归档/解档。实现NSCoding协议必须实现的两个方法:

1.编码(对象序列化):把不能直接存储到plist文件中得到数据,转化为二进制数据,NSData,可以存储到本地;
2.解码(对象反序列化):把二进制数据转化为本来的类型。

二.NSUserDefaults

用来保存应用程序设置和属性、用户保存的数据。用户再次打开程序或开机后这些数据仍然存在。NSUserDefaults可以存储的数据类型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。如果要存储其他类型,则需要转换为前面的类型,才能用NSUserDefaults存储。

三.Write写入方式

  • 永久保存在磁盘中。属性列表中只有NSString、NSArray、NSDictionary、NSData可writeToFile。此种一半是存储在沙盒中。

使用方法:
第一步:获得文件即将保存的路径:

NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask,YES);
NSString *ourDocumentPath =[documentPaths objectAtIndex:0];

第二步:生成在该路径下的文件:

//fileName就是保存文件的文件名
NSString *FileName=[documentDirectory stringByAppendingPathComponent:ourDocumentPath];

第三步:往文件中写入数据:

//将NSData类型对象data写入文件,文件名为FileName
[data writeToFile:FileName atomically:YES];

最后:从文件中读出数据:

//从fileName中读取文件
NSData data=[NSData dataWithContentsOfFile:FileName options:0 error:NULL];
  • 还有一种写入存储的类型是plist文件。 而plist文件可以存储的7中数据类型:array、dictionary、string、bool、data、date、number。

四.SQLite/CoreData

  • SQLite 数据库:大量有规律的数据使用数据库。
    SQLite作为一中小型数据库,应用ios中,跟前三种保存方式相比,相对比较复杂一些。还是一步步来吧!

  • CoreData :通过管理对象进行增、删、查、改操作的。它不是一个数据库,不仅可以使用SQLite数据库来保持数据,也可以使用其他的方式来存储数据。如:XML。(CoreData存取相较于Sqlite的功能更强大一些,对于一些普通的开发而言,常用的是SQLite)
    下面简单介绍一下我们不常用的CoreData的存储方式,已便了解。

CoreData的介绍:
CoreData是面向对象的API,CoreData是iOS中非常重要的一项技术,几乎在所有编写的程序中,CoreData都作为数据存储的基础。

CoreData是苹果官方提供的一套框架,用来解决与对象声明周期管理、对象关系管理和持久化等方面相关的问题。

大多数情况下,我们引用CoreData作为持久化数据的解决方案,并利用它作为持久化数据映射为内存对象。提供的是对象-关系映射功能,也就是说,CoreData可以将Objective-C对象转换成数据,保存到SQL中,然后将保存后的数据还原成OC对象。

CoreData的特征
通过CoreData管理应用程序的数据模型,可以极大程度减少需要编写的代码数量。

将对象数据存储在SQLite数据库已获得性能优化。

提供NSFetchResultsController类用于管理表视图的数据,即将Core Data的持久化存储在表视图中,并对这些数据进行管理:增删查改。

管理undo/redo操纵;

检查托管对象的属性值是否正确。

Core Data的6成员对象
NSManageObject:被管理的数据记录Managed Object Model是描述应用程序的数据模型,这个模型包含实体(Entity)、特性(Property)、读取请求(Fetch Request)等。

NSManageObjectContext:管理对象上下文,持久性存储模型对象,参与数据对象进行各种操作的全过程,并监测数据对象的变化,以提供对undo/redo的支持及更新绑定到数据的UI。

NSPersistentStoreCoordinator:连接数据库的Persistent Store Coordinator相当于数据文件管理器,处理底层的对数据文件的读取和写入,一般我们与这个没有交集。

NSManagedObjectModel:被管理的数据模型、数据结构。

NSFetchRequest:数据请求;

NSEntityDescription:表格实体结构,还需知道.xcdatamodel文件编译后为.momd或者.mom文件。

Core Data的功能
对于KVC和KVO完整且自动化的支持,除了为属性整合KVO和KVC访问方法外,还整合了适当的集合访问方法来处理多值关系;

自动验证属性(property)值;

支持跟踪修改和撤销操作;

关系维护,Core Data管理数据的关系传播,包括维护对象间的一致性;

在内存上和界面上分组、过滤、组织数据;

自动支持对象存储在外部数据仓库的功能;

创建复杂请求:无需动手写SQL语句,在获取请求(fetch request)中关联NSPredicate。NSPreadicate支持基本功能、相关子查询和其他高级的SQL特性。它支持正确的Unicode编码、区域感知查询、排序和正则表达式;

延迟操作:Core Data使用懒加载(lazy loading)方式减少内存负载,还支持部分实体化延迟加载和复制对象的数据共享机制;

合并策略:Core Data内置版本跟踪和乐观锁(optimistic locking)来支持多用户写入冲突的解决,其中,乐观锁就是对数据冲突进行检测,若冲突就返回冲突的信息;

数据迁移:Core Data的Schema Migration工具可以简化应对数据库结构变化的任务,在某些情况允许你执行高效率的数据库原地迁移工作;

可选择针对程序Controller层的集成,来支持UI的显示同步Core Data在IPhone OS之上,提供NSFetchedResultsController对象来做相关工作,在Mac OS X上我们用Cocoa提供的绑定(Binding)机制来完成的。

你可能感兴趣的:(iOS开发中的数据存储方式)