0

我在我的一个应用程序中广泛使用 Core Data。通常,对于 UITableView,我使用的是 NSFetchedResultsController。但是在一个特定的视图控制器中,我需要显示一些数据的总和——这需要我首先获取数据,然后进行一个 for 循环来分析数据并进行计算。

但是,我认为,如果我获取大量数据(比如说,10.000 个对象,每个对象都包含一个 NSString 和一个浮点数),并进行 for 循环,它可能会导致我的应用程序崩溃。这是一个严重的风险吗?如果是这样,我该如何解决?(我想创建一个 NSAutoReleasePool,在计算后添加和释放每个对象,但我使用的是 ARC,所以我认为我不能)。

4

3 回答 3

1

在这样的循环中使用自动释放池......

@autoreleasepool {
    // Insert code in here
}

此外,您应该确保retainsRegisteredObjects在您的托管对象上下文中为“否”。另外,如果你真的开始使用太多,你可以手动控制你的故障,通过释放它们refreshObject:mergeChanges:

于 2012-08-16T23:33:49.330 回答
0

我认为你应该对你提出的循环没问题。

batchSize您可以通过设置fetch 请求来指示 Core Data 始终只获取谨慎数量的数据。然后,Core Data 会进行增量获取并为您处理内存管理。

于 2012-08-16T15:25:30.293 回答
0

您无需从核心数据实体中获取所有属性来执行您尝试归档的复杂计算。只需在您的 NSFetchRequest 上使用 setPropertiesToFetch: ,这将允许您仅获取您需要的属性。此外,为您的 fetch 请求使用 setBatchSize 来告诉核心数据对您的对象进行故障处理以保持低占用空间。

于 2012-08-16T23:45:38.863 回答