Core Data 和 SQLite 是什么关系

core data是对sqlite的封装,因为sqlite是c语言的api,然而有人也需要obj-c的api,所以有了core data ,另外,core data不仅仅是把c的api翻译成oc的api,还提供了一些管理的功能,使用更加方便。

1. App升级之后数据库字段或者表有更改会导致crash,CoreData的版本管理和数据迁移变得非常有用,手动写sql语句操作还是麻烦一些。

2. CoreData不光能操纵SQLite,CoreData和iCloud的结合也很好,如果有这方面需求的话优先考虑CoreData。

3. CoreData并不是直接操纵数据库,比如:使用CoreData时不能设置数据库的主键,目前仍需要手动操作。

4. core data还有其他sql所不具备的优点,比如对undo的支持,多个context实现sketchbook类似的功能。为ManagedObject优化的row cash等

5. 另外core data是支持多线程的,但需要thread confinement的方式实现,使用了多线程之后可以最大化的防止阻塞主线程。

6. 效率上其实比较不出来感觉,因为手机程序的数据库比较小。

与SQLite中的对应关系

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

NSEntityDescription

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

NSPersistentStoreCoordinator

这个类的对象通常用NSManagedObjectModel的对象来初始化, 这个类抽象出不同的存放方式, 最经常用的是NSSQLiteStoreType.  也就是一个负责把数据库存起来的引擎。

NSManagedObjectContext

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

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

怎么查看底层的Sqlite数据库

https://blog.csdn.net/xiliang_honst/article/details/7862153 

func ifExists(instanceid id:Int)->Bool{
let app = UIApplication.shared.delegate as! AppDelegate
let context = app.persistentContainer.viewContext //声明数据的请求
let fetchRequest = NSFetchRequest<Composing>(entityName:"Composing")
//fetchRequest.fetchLimit = 10 //限定查询结果的数量
fetchRequest.fetchOffset = //查询的偏移量 //设置查询条件
let requestString:String = "composingid = \(id)"
let predicate = NSPredicate(format: requestString, "")
fetchRequest.predicate = predicate //查询操作
do {
let fetchedObjects = try context.fetch(fetchRequest)
if(fetchedObjects.count == ){
return false
}
else{
return true
} }
catch {
fatalError("查询失败:\(error)")
}
}

Core Data怎么支持多线程?

工程日记之HelloSlide(3):如何使用Core Data数据库,以及和sqlite之间的对应关系的更多相关文章

  1. 工程日记之HelloSlide(1):Swift自定义可视化组件的方法(继承UIView和在StoryBoard中设置)

    需求描述 HelloSlide是把文本自动转化成幻灯片的软件,在幻灯片中我们有SmartArt:各种各样的几何形状,并且可以自定义大小和颜色,放在幻灯片不同的位置. 为了在我们的软件中实现类似的效果, ...

  2. 工程日记之HelloSlide(2) : UITextView中如何根据给定的长宽,计算最合适的字体大小

    需求描述 一般的需求是将UITextview的大小自适应文本高度,会做出随文本内容增加,文字框不断增大的效果: 本文反其道而行之,在给定文字框大小的情况下:字数越多,字体越小: 需求来源: 考虑将文字 ...

  3. Core Data数据库迁移

    一. Lightweight Migration i. 适合场景 Simple addition of a new attribute Removal of an attribute A non-op ...

  4. iOS Core Data 数据库的加密(待研究)

    https://github.com/project-imas/encrypted-core-data 使用起来很方便,底层还是使用了SQLCipher,有时间要研究一下! 数据库的密码不能用固定字符 ...

  5. 【转】深受开发者喜爱的10大Core Data工具和开源库

    http://www.cocoachina.com/ios/20150902/13304.html 在iOS和OSX应用程序中存储和查询数据,Core Data是一个很好的选择.它不仅可以减少内存使用 ...

  6. Core Data 教学

    看了一篇国外的文章,关于iOS9的Core Data教学,在这里做了一下总结 Core Data 教学 示例开源地址:LastDayCoreData 在这篇文章中我们将学习Core Data的系列教程 ...

  7. Core Data-备用

    Core Data是一个功能强大的层,位于SQLite数据库之上,它避免了SQL的复杂性,能让我们以更自然的方式与数据库进行交互.Core Data将数据库行转换为OC对象(托管对象)来实现,这样无需 ...

  8. Core Data数据持久性存储基础教程-备用

    摘要 就像我一直说的,Core Data是iOS编程,乃至Mac编程中使用持久性数据存储的最佳方式,本质上来说,Core Data使用的就是SQLite,但是通过一系列特性避免了使用SQL的一些列的麻 ...

  9. iOS数据持久化 -- Core Data-备用

    Core Data是一个功能强大的层,位于SQLite数据库之上,它避免了SQL的复杂性,能让我们以更自然的方式与数据库进行交互.Core Data将数据库行转换为OC对象(托管对象)来实现,这样无需 ...

随机推荐

  1. Notepad2&Notepad++

    写在前面 几个礼拜前电脑自带的记事本抽风,打开文本后台有进程但就是不显示界面,网上搜的教程无非是重装.杀毒.换包;这些操作要不就是太繁琐要不就是没效果,于是乎我物色了两款十分强大且轻量的开源记事本No ...

  2. 【LeetCode】101. 对称二叉树

    题目 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3, ...

  3. P1082 射击比赛

    P1082 射击比赛 转跳点:

  4. 法国:5G网络不会排除任何设备厂商

    腾讯科技讯,据国外媒体报道,法国财政部长布鲁诺·勒梅尔(Bruno Le Maire)日前表示,法国有关 5G 电信网络的决定将基于网络的安全和性能,他强调说,法国政府不会将某一个特定的厂商排除在法国 ...

  5. POJ 3254:Corn Fields

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9295   Accepted: 4940 Descr ...

  6. Asp.net mvc+EF+Sql Server2008数据库缓存依赖

    1.开启数据库缓存依赖功能(开启对数据库中表Article和ArticleType的缓存) (注:)如果要配置SqlCacheDependency,则需要以命令行的方式执行. aspnet_regsq ...

  7. tomcat以服务形式开机启动

    第一步 将tomcat配置为服务模式 cp $TOMCAT_HOME/bin/catalina.sh /etc/init.d/tomcat #将tocmt启动文件复制到/etc/init.d下 vim ...

  8. 063-PHP函数按地址传参,交换数值函数

    <?php function swap(&$x,&$y){ //定义交换数值函数 $temp=$x; $x=$y; $y=$temp; } $m=5; $n=15; echo & ...

  9. 如何在Windows系统下使用you-get下载网上的媒体资源

    关于you-get的专业介绍可以点击这个链接:中文说明 1,首先你要在你的电脑上安装python环境 Windows系统下: 首先,你需要去官网下载相应的版本: 也可以下载我网盘里的(注意看好自己的电 ...

  10. spring源码 RootBeanDefinition类的根接口AttributeAccessor

    /** * Interface defining a generic contract for attaching and accessing metadata * to/from arbitrary ...