从Core Data获取大数据后的周期风险

时间:2012-08-16 15:15:27

标签: iphone ios core-data

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

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

3 个答案:

答案 0 :(得分:1)

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

@autoreleasepool {
    // Insert code in here
}

此外,您应确保托管对象上下文中的retainsRegisteredObjects为NO。此外,如果您真的开始使用太多,可以通过refreshObject:mergeChanges:

释放它们来手动控制故障

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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