我在我的某个应用中广泛使用Core Data。通常,对于UITableView,我使用的是NSFetchedResultsController。但是在特定的视图控制器中,我需要显示一些数据的总和 - 需要我首先获取数据,然后进行for循环来分析数据并进行计算。
但是,我认为,如果我获取大量数据(比方说,每个持有NSString和浮点数的10.000个对象),并且进行for循环,可能会导致我的应用程序崩溃。这是一个严重的风险吗?如果有,我怎么解决它? (我想创建一个NSAutoReleasePool,在计算后添加和释放每个对象,但我使用ARC,所以我想我不能)。
答案 0 :(得分:1)
在这样的循环中使用自动释放池...
@autoreleasepool {
// Insert code in here
}
此外,您应确保托管对象上下文中的retainsRegisteredObjects
为NO。此外,如果您真的开始使用太多,可以通过refreshObject:mergeChanges:
答案 1 :(得分:0)
我认为你提出的循环应该没问题。
您可以通过设置获取请求的batchSize
来指示Core Data始终只获得谨慎的数据量。然后,核心数据将执行增量提取并为您处理内存管理。
答案 2 :(得分:0)
您无需从核心数据实体获取所有属性来执行您尝试归档的复杂计算。只需在NSFetchRequest上使用setPropertiesToFetch:这将允许您仅获取所需的属性。此外,使用setBatchSize为您的获取请求告诉核心数据故障您的对象以保持低占用空间。