Core Data 与 SQLite 3 [关闭]

2024-05-27

我已经对关系数据库相当熟悉并且使用过SQLite http://en.wikipedia.org/wiki/SQLite(和其他数据库)过去。然而,核心数据 http://en.wikipedia.org/wiki/Core_Data有一定的吸引力,所以我正在考虑花一些时间学习它,以便在我的下一个应用程序中使用。

使用 Core Data 比 SQLite 有更多好处吗?反之亦然?各自的优点/缺点是什么?

当 Apple 没有将 Core Data 用于 Mail.app 或 iPhoto.app 等许多旗舰应用程序,而是选择 SQLite 数据库时,我发现很难证明学习 Core Data 的成本是合理的。 SQLite 也广泛用于 iPhone 上。

熟悉这两种方式的人可以评论一下他们的使用体验吗?也许,与大多数事情一样,问题比仅仅使用其中之一更深刻?


虽然 Core Data 是 Apple 的后代企业对象框架 http://en.wikipedia.org/wiki/Enterprise_Objects_Framework,一个对象关系映射器(ORM),它与关系后端紧密相连,Core Data 是not一个 ORM。事实上,它是一个对象图管理框架。它管理着一个可能非常大的对象实例图,允许应用程序通过根据需要将对象移入和移出内存来处理无法完全装入内存的图。核心数据还管理对属性和关系的约束并维护引用完整性(例如,在关系中添加/删除对象时保持前向和后向链接一致)。因此,Core Data 是构建 MVC 架构“模型”组件的理想框架。

为了实现其图形管理,Core Datahappens使用 SQLite 作为磁盘存储。它could已经使用不同的关系数据库甚至非关系数据库来实现,例如CouchDB http://couchdb.apache.org/。正如其他人指出的那样,Core Data 还可以使用 XML 或二进制格式或用户编写的原子格式作为后端(尽管这些选项要求整个对象图适合内存)。如果您对如何在 SQLite 后端实现 Core Data 感兴趣,您可能需要查看 OmniGroup 的全方位数据对象 http://www.omnigroup.com/developer/框架,核心数据 API 子集的开源实现。这BaseTen http://basetenframework.org/框架也是使用 PostgreSQL 作为后端的 Core Data API 的实现。

由于 Core Data 无意成为 SQLite 的 ORM,因此它无法读取任意 SQLite 模式。相反,您不应该依赖于能够使用其他 SQLite 工具读取 Core Data 的 SQLite 数据存储;架构是可能更改的实现细节。

因此,直接使用 Core Data 或 SQLite 之间并不存在任何冲突。如果您想要一个关系数据库,请使用 SQLite(直接或通过 Objective-C 包装器之一,例如FMDB https://github.com/ccgus/fmdb),或关系数据库服务器。但是,您可能仍然想学习 Core Data 作为对象图管理框架。结合Apple的控制器类和键值绑定兼容的视图小部件,您可以实现完整的MVC架构very代码很少。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Core Data 与 SQLite 3 [关闭] 的相关文章

  • 使用 CursorLoader 查询 SQLite DB 并填充 AutoCompleteTextView

    我有一个 SQLite 数据库我想查询 我想通过 ICS 以 Android 2 2 为目标 我碰到this http www outofwhatbox com blog 2010 11 android simpler autocomple
  • CoreData:是否将图像存储到数据库?

    我正在制作一个应用程序 它从网站上为某些用户名拍摄照片 并将其显示在带有用户名的 UITable 中 然后当单击用户名时 它会显示该用户的照片 然后单击照片名称 它会显示全屏照片 我的问题是我正在使用 NSData 从互联网获取照片 我必须
  • 如何在Mac上启动Syslogd服务器以接受远程日志记录消息?

    有人知道如何在 Mac 上启动 Syslogd 服务器来接受远程日志记录消息吗 我启动了 Syslogd 但似乎它不接受远程消息 如果我执行 netstat an 看起来 udp 端口 514 正在侦听 但是 如果我使用 nmap 从笔记本
  • 应用程序内的 SQLite 文件版本兼容性

    我有一个 C NET 应用程序 一种复杂的计算应用程序 其中用户输入数据 处理后的信息使用 JSON 序列化和 EF 保存到 SQLite 文件中 需要时可以将其加载到我们的应用程序中 应用程序在开发过程中经历了很多变化 类也被修改 因此
  • TOpenDialog/NSOpenPanel 无法在沙盒 Delphi 应用程序中工作

    Firemonkey 应用程序中的 TOpenDialog 似乎存在问题 该应用程序已针对 Mac Appstore 进行沙箱处理 我使用XE3 但它也存在于XE2中 我其实在这里找到了一份QC报告 但仍然没有解决 http qc emba
  • 将 Android 应用程序从 Lite 升级到 Pro 版本时保持相同的 SQLite 数据库

    首先 我已经进行了搜索 但找不到我的问题的具体答案 所以这里是 我正在编写我的第一个 Android 应用程序 并计划拥有 Lite 版本 有限功能 和付费版本 完整功能 Lite 和 Pro 版本将使用相同的 SQLite 数据库结构 如
  • 卸载我安装的所有 Python 包及其依赖项,而不用破坏我的 Mac

    有很多问题 但正确的方法似乎是手动卸载不需要的所有内容 pip 在卸载时不会卸载包的依赖项 https stackoverflow com questions 7915998 does uninstalling a package with
  • 一个好的8086模拟器[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 mac 有没有 8086 模拟器 如果是 哪个是最好的 除非您需要真正的原始 8086 带有自定义操作系统 否则您应该尝试 DosBox
  • 在没有预览窗口的情况下使用 AVCaptureVideoDataOutputSampleBufferDelegate

    我正在开发一个基于 Swift 的 macOS 应用程序 我需要捕获视频输入 但不将其显示在屏幕上 而不是显示视频 我想将缓冲的数据发送到其他地方进行处理 并最终显示它在 a 中的一个物体上SceneKit scene 我有一个Camera
  • 在 OS X 上创建和使用静态库

    好的 我正在尝试创建一个 Cocoa 库 静态 并使用 但我不断收到错误 我创建了一个超基本的静态库 TSXLib 其中仅包含一个额外的类 import
  • 如何在 SQLite 中将时间戳转换为字符串?

    我有一个表 其中存储了时间戳 以毫秒为单位 我想将这些时间戳转换为人类可读的形式 这是我的表的输出示例 SELECT date raw strftime d m Y date 1000 as string FROM my table raw
  • 在 Mac 操作系统上使用 ffmpeg 录制视频

    我想在 mac OS 上使用 ffmpeg 以任何格式录制实时网络摄像头视频 我尝试了很多 但无法找到用于重新编码视频的命令 所以请任何人都可以告诉我 ffmpeg 命令用于使用 Mac 操作系统的网络摄像头捕获视频 提前致谢 对于 Mac
  • 尝试将 SQLite DB 从数据复制到 SD 卡

    我正在使用以下代码 该代码发布在 Stack Overflow 上的某个位置 并根据我的目的进行了修改 try File sd Environment getExternalStorageDirectory File data Enviro
  • Vim 和 Mac:如何在不使用 pbcopy 的情况下复制到剪贴板

    我有一个同时支持剪贴板和 xterm clipboard 的 vim 版本 然而 y or y不要复制到系统剪贴板 我知道我可以使用 w pbcopy 甚至为其创建快捷方式 但我真的想要标准方式 我也看到了 fakeclip 但希望找到一个
  • Sqlite数据库生命周期?关闭应用程序后它会被删除吗?

    我正在遵循一个简单的教程 该教程创建一个从 SQLiteOpenHelper 扩展的类 并创建一个包含一个表和 5 行的数据库 好的 但我需要更多地了解 android Sqlite 数据库 例如 如果应用程序关闭或手机关机会发生什么 数据
  • android中向sqlite中插入大量数据

    目前 我必须一次向我的 Android 中插入超过 100 亿条数据 然而 内存不足的问题会使程序崩溃 sqlite 插入测试非常简单 只需使用 for 循环生成 sql 插入命令并通过 开始 和 提交 进行包装 private Array
  • 在 mac os Sierra 上,卡在“设置 CocoaPods 主存储库”上

    转移到 mac os sierra 后 我完全格式化了我的 mac 现在每次运行时我都面临安装 cocoapods 的问题sudo gem install cocoapods pre一切都安装得很好 当我尝试安装 Pod 时 终端堆栈打开S
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • iphone sqlite 静态链接?

    有人静态链接 sqlite 而不是使用动态链接 吗 我遇到的问题是 越狱手机的用户没有与普通 iPhone 所采用的 sqlite 版本相同的版本 因此导致崩溃 我假设在我的应用程序中静态链接已知版本的 sqlite 就是答案 我需要全文支
  • 如何在 UITableView 的 switch 语句中创建变量?

    我正在构建一个包含三个部分的 tableView 我已经完成了前两个工作 但最后一个有点阻力 我的问题似乎涉及尝试在 switch 语句中声明变量 实际上是嵌套的 switch 语句 据我所知 这不是一个好主意 但在这种情况下 这似乎是唯一

随机推荐

  • 让 Google 地图在刷新后保留缩放和居中?

    如何让 Google 地图保留用户的视图 缩放级别和 HTTP 刷新后 现在 它会在每次刷新后重置视图 我可以调整代码吗 下面说 zoom 当前缩放级别 和 center 当前中心 位置 以某种方式 function initialize
  • 如何在猫鼬中使用聚合

    如何在 mongoose 中定义以下 MongoDB 聚合查询 db contacts aggregate group id code Code name Name 查询的目的是获取不同代码和名称的列表 我当前的模型代码是 use stri
  • 域名 foo.bar 指向 127.0.53.53 ——为什么?

    我今天刚刚注意到域名 foo bar 解析为 127 0 53 53 http foo bar http foo bar http whois domaintools com foo bar http whois domaintools c
  • 打开我网站上的链接不起作用

    在我的网站上 我有一个我正在尝试获取工作的链接 我有一个遵循正常格式的链接 即 href 以 www youtube com 作为目标链接 并在末尾添加 target blank 当我单击该链接时 托管我的网站的网站会显示一条错误消息 当我
  • Python - 使用 BeautifulSoup 从 URL 列表中抓取文本的最简单方法

    使用 BeautifulSoup 从几个网页 使用 URL 列表 中抓取文本的最简单方法是什么 有可能吗 最好的 乔治娜 import urllib2 import BeautifulSoup import re Newlines re c
  • MATLAB - 从目录读取文件?

    我希望从目录中读取文件并对每个文件迭代执行操作 此操作不需要更改文件 我知道我应该为此使用 for 循环 到目前为止我已经尝试过 FILES ls path to folder for i 1 size FILES 1 STRU pdbre
  • 连接到 Docker Postgres 容器连接超时

    所以我所做的是 docker run d e POSTGRES USER user e POSTGRES PASSWORD 456789 name admin service p 5432 5432 postgres 当我检查时docker
  • pm2 start app.js 在 15 次重启后退出

    npm start 会很好地启动我的应用程序 但是当我这样做时 pm2 start app js I get PM2 Spawning PM2 daemon PM2 PM2 Successfully daemonized PM2 Proce
  • JavaFX 中的 MVC 模式与场景生成器

    我是 JavaFX 新手 根据我当前的设置 正在努力创建合适的 MVC 架构 我使用 Scene Builder 单击了一个 UI 并指定了一个 Controller 类 Startup public class Portal extend
  • GitHub Action 工作流程未运行

    我有一个 GitHub 操作工作流程文件 myrepo github workflows Build Webpage yml 它包含以下内容 name Webpage Build on push branches webpage jobs
  • 从 pandas 值序列创建 pandas 区间序列

    我能找到的最接近的答案似乎太复杂 如何在 pandas 中创建间隔列 https stackoverflow com a 47396828 575530 如果我有一个看起来像这样的 pandas 数据框 Value 6 12 56 60 1
  • 从多个 .csv 文件创建混淆矩阵

    我有很多具有以下格式的 csv 文件 338 800 338 550 339 670 340 600 327 500 301 430 299 350 284 339 284 338 283 335 283 330 283 310 282 3
  • exec()、shell_exec()、curl_exec() 的安全漏洞

    有时 我会使用 exec shell exec 和curl exec 以下是典型用途 假设其中有 PHP 变量 即第一个变量中的 html 用户有可能修改其内容 从安全漏洞的角度来看 我应该关注什么 escapeshellcmd 和 esc
  • 计算级别内的值

    我在 R 中生成了一组级别cut 例如假设 0 到 1 之间的小数值 分为 0 1 个区间 gt frac lt cut c 0 1 breaks 10 gt levels frac 1 0 001 0 1 0 1 0 2 0 2 0 3
  • 无法让我的脚本自动生成一些值以在有效负载中使用

    我创建了一个脚本 通过随后发送两个 https 请求来从目标页面获取 html 元素 我的脚本可以完美地完成这件事 但是 我必须从 chrome 开发工具复制四个值来填充其中的四个键payload为了发送最终的http请求到达目标页面 这是
  • 获取Android联系人排序首选项

    在 Android 的 联系人 gt 设置 中 我们有 列表排序依据 和 查看联系人姓名 选项 有什么方法可以在另一个应用程序中获取这些首选项吗 这意味着我的应用程序有我自己版本的联系人列表 我需要这些才能对其进行相应的排序 int sor
  • 如何删除 Google 地图自动完成下拉列表中的“Powered by Google”徽标?

    文档表明 如果我们要使用 Google 地图的自动完成功能 我们可以删除底部的 Powered by Google 徽标 知道该怎么做吗 阿尼梅什 南迪的答案有点旧了 实际上 要删除 由谷歌提供支持 徽标我必须使用以下代码 pac cont
  • 如何使用 Kafka 发送大消息(超过 15MB)?

    我发送字符串消息到Kafka V 0 8使用 Java Producer API 如果消息大小约为 15 MB 我会得到MessageSizeTooLargeException 我尝试过设置message max bytes到 40 MB
  • 删除已从另一个下拉菜单中选择的下拉值

    我在网上搜索了一段时间 但仍然找不到答案 我的网站上有三个下拉菜单 我使用它们来接受用户首选项 以便用户可以控制结果的输出 所以我想知道如果在其中一个下拉列表中选择了该值 是否可以从其他两个下拉列表中取出该值 例如 如果用户在第一个电影中选
  • Core Data 与 SQLite 3 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi