2

在我的 iPad 应用程序中,我下载了大量的客户和订单历史信息,我将这些信息保存在内存中并在整个应用程序中使用。然而,对于一些用户来说,下载的数据量变得如此之大,以至于应用程序崩溃。

我刚刚建立了一个 CoreData 存储来将所有客户和订单数据写入磁盘。不过,在我进一步讨论之前,CoreData 是解决此问题的最佳方法吗?我需要能够通过一些参数对这些数据集进行排序并使用它们驱动表视图(CoreData 似乎非常适合),但我还需要查看整个数据集以驱动其他视图。例如,一个字母过滤器,它只显示我有结果的字母。

4

2 回答 2

4

Core Data 绝对是首选技术。您会发现您可以非常轻松地解决所有问题并实现您提到的所有功能。

就 iOS 上的数据操作优化(性能和内存)而言,Core Data 确实是一个非常健壮且经过良好测试的框架。如果您想最大限度地发挥 iOS 设备的容量,几乎没有比这更好的了。

例如,最近我参与了一个项目(也涉及大量客户数据),该项目已有几年历史,在管理内存、速度和复杂性时简直碰壁了。对 Core Data 进行重构是轻而易举的事,而且性能提升是巨大的。

Core Data 成功的原因在于它完全隐藏了数据库层并专注于对象图。这导致代码更具可读性和可维护性(与 SQL 语句相反)。虽然理论上您可以在 Core Data 中使用多种存储,但最常见的一种是 SQLite,它是世界上安装数量最多的数据库。由于它的速度和占用空间小,它在移动设备上无处不在。

这使我得出结论,Core Data 是适合您的方式。

于 2012-11-24T22:40:12.320 回答
0

我最近使用 sqlite 后备存储将我的应用程序从直接的 sqlite 移植到核心数据。我有一个大约 100,000 条记录的合理大小的数据库。我也花了很多时间优化它

尽管所有的苹果文档和公关都说它高效、快速等,但我发现,与直接的 sqlite 相比,对于大量数据,它确实有更高的内存要求并且速度明显慢。快速搜索堆栈溢出将证实这一点。关于速度,内存要求等有很多未解决的问题。

特别是,插入和删除要慢几个数量级。提取通常比直接 sqlite 使用更多的内存。在大多数情况下,核心数据会提取更多数据。例如,在直接 sqlite 中,您可以提取一个整数 id,然后在需要时提取其余数据。coredata 会提取更多数据来做到这一点。删除要求您在删除数据之前先将数据拉下来等。

如果您需要加密您的数据。这是核心数据中的一个挑战,没有人能够真正提供可靠的加密,同时又不破坏诸如 nspredicates 之类的东西。它是否需要编写更少的代码是有争议的。肯定有一个陡峭的学习曲线。核心数据的思维方式与关系数据库的思维方式非常不同。

so why would you use core data? its the additional features, support for undo, batch fetching, manages object updates for you and syncing to iCloud (though this is very buggy to the point that its unusable right now) etc etc. Some things it does for you. you don't need to manage primary keys, relationships etc etc. In the apple ecosystem it seems future proof given new features such as icloud support are being built into core data. Though it does kill your portability if you want to go to android etc.

于 2013-05-12T01:44:27.887 回答