zoukankan      html  css  js  c++  java
  • IOS数据存储之CoreData使用优缺点

    https://www.cnblogs.com/whoislcj/p/5488024.html

    https://www.cnblogs.com/gfxxbk/p/5515446.html

    1. SQLite数据库

    • sqlite数据库操作的基本流程是, 创建数据库, 再通过定义一些字段来定义表格结构, 可以利用sql语句向表格中插入记录, 删除记录, 修改记录, 表格之间也可以建立联系。

    • 这些操作都需要使用SQL语句去实现,感觉操作很直接。如果先前有一点数据库和SQL基础的话,写起来会感觉很亲切,都是一些数据库操作的语句。但是当操作变多之后,语句越来越多,就很烦,代码比较多,看起来也会混乱一些。

    • 如果想要详细了解,可以看iOS学习36数据处理之SQLite数据库

    2. CoreData数据库

    • CoreData.framework :iOS中提供了对原始SQLite数据库API访问的封装,通过这个framework来管理数据缓存和持久数据要比使用SQL语句操作SQLite数据库简单和方便许多。

    • 机制:通过framework来存储和查询数据只需要使用framework提供的类就可以,你可以完全使用对象的形式来管理你的数据以及数据之间的关系,framework已经很好地将数据库表和字段封装成了对象和属性,表之间的一对多、多对多关系则封装成了对象之间的包含关系.

    • 通过 relationship 来表示:

      一对多时:设置为 properties 项选中 Optional, Plural 选项 To-Many Relationship 选中;

      多对一反向关系时:properties 项选中 Optional, Count 项选中Minimun 和 Maximun 并分别设置其值为1;

      如果想要详细了解,可以看iOS学习37数据处理之CoreData

    3. 比较

     1> CoreData的类与SQLite数据库中的文字描述做一个对应:

      NSEntityDescription --> 表格结构
      NSManagedObjectModel --> 数据库中所有表格和他们的联系
      NSPersistentStoreCoordinator --> 数据库存放方式
      NSManagedObjectContext --> 数据库操作
      NSFetchRequest --> 查询语句
      NSManagedObject --> 表格的记录

     2> 下面我们可以详细的看看CoreData的类 

    • NSEntityDescription、NSManagedObjectModel

       NSEntityDescription 用来定义表格结构, 所以你就可以理解 NSManagedObjectModel 中的 setEntities:(NSArray *)entities 函数大概有什么用了 . 通常, 定义 model , 是用文件 CoreData.xcda*****odel , 可以图形化的操作. 这类似用nib来创建界面.

    • NSPersistentStoreCoordinator

       这个类的对象通常用 NSManagedObjectModel 的对象来初始化, 这个类抽象出不同的存放方式, 最经常用的是 NSSQLiteStoreType.

    • NSManagedObjectContext

       这个类的对象又用 NSPersistentStoreCoordinator 的对象来初始化, 它里面有些方法来添加, 删除 NSManagedObject

    • NSFetchRequest

       通常用 NSEntityDescription 来构造查询, 也就指定查询那个表格, 另外可以指定排序.

    •  NSFetchedResultsController

      NSFetchedResultsController 只是又封了一下, 和 NSFetchRequest 合起来使用, 方便取数据, 另外和 NSManagedObjectContext 关联, 当数据库发生变化的时候收到通知.

     3> 特点比较

      • CoreData的强大之处就在于这种关系可以在一个对象更新时,其关联的对象也会随着更新,相当于你更新一张表的时候,其关联的其他表也会随着更新。

      • Core Data的另外一个特点就是提供了更简单的性能管理机制,例如,使用NSFetchedResultsController类,你不用使用SQL的Limit而是使用NSFetchRequest类的setFetchBatchSize()就可以限制查询记录的总数,而NSFetchedResultsController类神奇的地方在于需要获取更多记录的时候,这个类会自动更新其缓存。

      • 对于多表查询上相对来说,CoreData 没有 SQL 直观,但 CoreData 的功能还是可以完成相关操作的,但是对于类似外连接,左连接等操作,在CoreData中就显得无力。

  • 相关阅读:
    Webpack 入门学习
    如何把百度地图引入自己的网页中
    哗啦啦Python之路 Day 1 数据类型,运算符和表达式
    哗啦啦python之路 Day 2 程序控制结构
    找个轻量级的Log库还挺难
    W32.Downadup.autorun病毒的清除
    一个VxWorks源代码网站
    VisualSVNServer无法卸载也无法安装,报告不是有效的MOF文件(0x8004401e)错误
    如何用Visual Studio 2005编译Wireshark的插件
    TAU G2中的BitString和OctetString
  • 原文地址:https://www.cnblogs.com/itlover2013/p/14917970.html
Copyright © 2011-2022 走看看