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. xcode windows版安装使用教程

    随着iPhone.iPad.Mac等苹果产品越来越火爆,越来越多的初学者想要了解和尝试苹果平台,包括苹果操作系统Mac OS X.苹果演示软件Keynote.苹果开发工具Xcode等.然而,苹果电脑价 ...

  2. ios端简单改变webView的黑白夜模式

    extension HTController:WKUIDelegate, WKNavigationDelegate,WKScriptMessageHandler { func userContentC ...

  3. leetcode1143 Longest Common Subsequence

    """ Given two strings text1 and text2, return the length of their longest common subs ...

  4. 看完本文,Essay写作再也不需要凑字数

    很多同学都说过自己写论文的时候出现“词穷”的情况,无奈只能靠“胡编乱造”来凑字数写出开头段,这其实是大家的阅读量没有达到要求.但不能因为出现这种情况就对自己的论文不负责任,否则你的论文分数可能就不会对 ...

  5. Unity Reflection Probe使用入门

    贴官方API的说法: 反射探头: 一个反射探头很像一个相机,捕获了周围所有方向的球形视图.然后将捕获的图像存储为Cubemap,可由具有反射材料的对象使用.在给定场景中可以使用多个反射探测器,可以将对 ...

  6. POJO,JavaBean,entity的理解

    POJO本质是就是JavaBean JavaBean JavaBean实际上是指一种特殊的Java类,它通常用来实现一些比较常用的简单功能,并可以很容易的被重用或者是插入其他应用程序中去.所有遵循“一 ...

  7. JavaScript原生Ajax请求纯文本数据

    源代码 ajax1.html: <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g ...

  8. JPA#复杂查询#自定义查询

    编写自定义SQL基于下面信息:1. SpringData JPA 在为Repository接口生成实现的时候,会查找是否有 "接口名称"+"Impl"的类,如果 ...

  9. Mysql 事务隔离级别分析

    Mysql默认事务隔离级别是:REPEATABLE-READ --查询当前会话事务隔离级别mysql> select @@tx_isolation; +-----------------+ | ...

  10. 084-PHP文件引用include

    02.php <?php $color = 'green'; $fruit = 'apple'; ?> 01.php <?php echo "A $color $fruit ...