objective-c - 对于跨时间范围的获取等,SQLite 会比 Core Data 更受青睐吗?

标签 objective-c ios sqlite core-data

我已经阅读了 Core Data 和 SQLite 3,但我不确定哪个最适合我。

我从我们的 API 获取约会列表,然后需要存储它们。我需要根据日期范围、员工、客户等来引用它们。根据我的阅读,SQLite3 最适合检索某个时间范围内发生的约会以及分配给某些客户和员工的约会。

我读到 Core Data 是可行的方法,但它似乎无法按照我想要的方式运行。有人可以根据我的需求对此进行更多解释,并让我知道哪种效果最好吗?如果我使用 SQLite3,FMDB 是最好的吗?

更新1:

我在使用核心数据时担心的一件事是,Apple 似乎不喜欢使用多线程核心数据的应用程序。

最佳答案

我认为,对于这种特殊情况,核心数据将是更好的选择,特别是对于约会、客户和员工之间的关系。

Core Data 不仅仅是一个数据库,它还是一个对象图管理系统。这意味着您可以通过在数据模型中将这些关系指定为一对一、一对多或多对多(具体取决于合适的方式)来轻松维护客户、员工和约会的关系。将约会分配给员工非常简单,只需将该分配的employee关系设置为适当的对象,或者执行与将约会添加到员工内的appointments关系相反的操作。获取这些约会就像获取该员工关系中的对象一样简单,并且通过使用具有这些关系的匹配属性的自定义 NSManagedObject 子类可以使代码变得非常干净。

正如 SteAp 指出的那样,编写 NSPredicates 来根据特定时间范围进行过滤很容易,如 this question 中所述。 。通过使用适当的选项,您可以在调试日志记录模式下运行应用程序,以查看响应这些谓词而生成的 SQLite 查询,它们通常是您为实现相同的提取而编写的内容。

在 iOS 上,Core Data 几乎总是使用 SQLite 作为其后备数据存储,因此您可能会认为这会带来巨大的开销。相反,它执行了一些非常好的优化,例如批量获取,这可以使 Core Data 在许多情况下优于原始 SQLite。我在自己的应用程序中亲眼目睹了这一点,特别是当涉及到要在表格或类似结构中呈现的长结果列表时。有certain cases它会在哪里崩溃,但这样的情况很少而且相距很远。

我在我的应用程序中完成了数据模型的原始 SQLite 和 Core Data 实现,并且在每种情况下 Core Data 都极大地减少了我需要编写的代码量。结合我所看到的性能优势,我已经或即将将所有基于 SQLite 的项目迁移到 Core Data。

即使是布伦特·西蒙斯 (Brent Simmons) 也这么说:

I bet Core Data is the right way to go 95% of the time. Or more. It’s easy to work with. It’s fast (in most cases).

然后他又加上了 more recent statement :

This may come as a surprise to people who have it in their head that I’m the guy who doesn’t like Core Data. So I’ll say this — on top of all the other good reasons to use Core Data, here’s another: Core Data is the standard Cocoa object persistence system.

When it gets better, our apps get better. (And it does keep getting better.)

And, more importantly, as the standard it means that any Cocoa developer — a teammate or someone who acquires the app — can jump in and quickly understand how it works.

Yes, your custom thing may be better for your app. But will it stay better? And if you bring someone on to help you, how quickly will they learn your custom thing?

Use Core Data.

关于objective-c - 对于跨时间范围的获取等,SQLite 会比 Core Data 更受青睐吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9386408/

相关文章:

iOS:UItableview 在 dequeueReusableCellWithIdentifier 上重复值

iphone - 如何使用 NSUserDefaults 正确工作(检索值)

objective-c - 一个线程与它的 NSAutorelease 池有什么关系?

iphone - fmdb 在运行更新查询时锁定应用程序

ios - 是否可以在一个屏幕上显示两个 iAd?

iphone sqlite 问题

ios - 如何将 IBOutlet 连接到类类别的 Storyboard

ios - 预加载 tableView 单元格并防止重新加载

sql - SQLite3 中的 REFERENCES 关键字

wpf - 为什么我的 WPF 应用程序中出现 "Unable to load DLL ' sqlite 3'"?