1

我对 Core Data 有点陌生,有一个普遍的问题。

在我当前的项目中,用户可以访问我所在州每个县的各种传感器报告的数据。每个传感器都以表格视图表示,该表格视图从 Web 服务调用中收集其数据。调用网络服务可能需要一些时间,因为此应用程序可能用于无线连接速度较慢的农村地区。此外,用户通常只需要来自该州 55 个县中的一两个县的数据。每个县可能有 15 到 500 个由 Web 服务返回的项目。由于传感器名称和位置很少更改,我希望应用程序缓存来自 Web 服务调用的数据,以便更快地收集传感器位置列表(并在某些情况发生更改的情况下提供刷新按钮)。该应用程序已经使用 Core Data 来存储带有书签的传感器位置,因此它已经在应用程序中进行了设置。

我的问题是是使用 Core Data 来缓存传感器列表,还是使用 SqlLite 数据存储。由于 js 已经有一个数据模型,我可以简单地向模型添加另一个实体。但是,我担心这是否会引入不必要的开销,或者根本不会引入。

作为 Core Data 的新手,似乎真正发生的一切是对象被序列化,并且它们的属性作为字段添加到由 Core Data 管理的 SqlLite DB 中。如果是这种情况,使用已经存在的 Core Data 存储似乎真的不会产生任何开销。

任何人都可以帮我解决这个问题吗?谢谢!

4

2 回答 2

1

作为 Core Data 的新手,似乎真正发生的一切是对象被序列化,并且它们的属性作为字段添加到由 Core Data 管理的 SqlLite DB 中。如果是这种情况,使用已经存在的 Core Data 存储似乎真的不会产生任何开销。

情况并非总是如此。Core Data 对开发者隐藏了它的存储实现。它有时是一个 SQL 数据库,但在其他情况下,它可以是不同的数据存储。如果您需要 CoreData 的全面指南,我推荐这篇 objc.io 文章

正如@CouchDeveloper 所指出的,CoreData 是一个磁盘 io/CPU 绑定进程。如果您注意到性能下降,请将其放入后台线程(是的 - 这是一个非常令人头疼的问题),但它总是比普通网络更快。

于 2013-11-12T16:53:51.390 回答
1

似乎所有真正发生的事情是对象被序列化,并且它们的属性作为字段添加到由 Core Data 管理的 SqlLite DB 中

你是对的。Core Data 做得更多,但这是基本功能(如果您告诉它使用 SQLite 存储,这是大多数人所做的)。

至于要存储在 Core Data 中的记录数量,这应该不是问题。我现在正在开发一个 Core Data 应用程序,它还在 Core Data 中存储了超过 20,000 条记录,并且我仍然可以获得非常快的获取时间,例如在键入时自动完成。

Core Data 肯定会增加一些开销,但如果您只有很少的实体和关系,并且没有在多个上下文中创建/修改对象,则可以忽略不计。

于 2013-11-12T17:03:21.803 回答