objective-c - 核心数据过度使用?

标签 objective-c ios database xcode core-data

我有一个应用程序可以跟踪用户的驾驶行程(路径)。我使用 Core Data 保存所有信息。

数据库结构:

路径 ->> 点

点包含纬度和经度值。

我所做的是,每次更新 CLLocationManager 时,我都会将该点添加到数组中。一旦用户到达路径的末尾,我循环遍历并将所有这些位置添加到数据库中。

我的问题是...这是解决此问题的最佳方法吗?我的两个选择是:

  1. 将所有位置添加到数组,然后将所有位置添加到核心数据。

  2. 每次更新 CLLocationManager 时,将其直接添加到核心数据中。

我不确定是否有一些最佳实践来访问/更改核心数据。我是否应该批量执行(for 循环),以便我可以调用

if ([managedObjectContext save:&error]) {
   // handle save error
}

在 for 循环的末尾并保持所有内容的压缩。

或者我应该在每次 CLLocationManager 更新调用 [managedObjectContext save:&error] 时简单地添加一个新点。

我对选项 1 唯一担心的是,如果应用程序在记录路径时崩溃,则不会保存任何信息。

因此,使用选项 2 的一个好处是每次更新后都会保存数据,但我不确定如此频繁地访问核心数据是否是一种不好的做法。

非常感谢您抽出宝贵时间提供帮助。

最佳答案

假定 NSLocationManager 更新的频率(最多每隔几秒),经常保存绝对没问题。此外,您的阵列将占用越来越多的内存,这并不是真正必要的。

您仍然可以谨慎地进行,例如,每 10 点保存一次。

此外,您或许应该保存在 applicationWillResignActive 中,以防应用程序中断。

关于objective-c - 核心数据过度使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11753512/

相关文章:

ios - 从 UITableViewCell 调用 ViewController 中的函数

mysql - 为什么使用此查询时我的结果为空

database - 如何在 Cloudfoundry 中扩展数据库服务?

ios - MSAL 添加范围 @"offline_access"、@"openid"、@"profile"问题

objective-c - 是否有一种简单的方法(在 Cocoa/iOS 中)将方法调用排队,以便在下一个运行循环中运行一次?

ios - Swift:如何在没有 topBorder 的情况下向 UITabBarController 添加阴影

ios - 在 prepareForSegue 中获取 UIPopoverController 引用?

mysql - 如何在 Mac OS 10.10.3 (Yosemite) 上使用 ODBC 将 R 连接到 MySQL 数据库

objective-c - 尝试理解 nibs 中的 First Responder 对象

ios - 检测 UISearchBar 中的触摸