jar*_*oal 2 core-data objective-c ios
我有一个非常简单的小架构,看起来像这样:
Trail - > Segment - > Coordinate
所有适当的关系都是为了使这项工作成熟,他们当然让我做这样的事情:
NSArray *trails = <query all trails>
for (Trail *trail in trails) {
for (Segment *segment in trail.segments) {
for (Coordinate *coordinate in segment.coordinates) {
//do something with coords
}
}
}
Run Code Online (Sandbox Code Playgroud)
来自Django的背景,我很高兴这一点,并假设可能会对sqlite3运行最少的查询.错误!对这些循环中的每个对象都进行了查询.
我现在已经阅读了有关故障的核心数据文档,我理解发生了什么,虽然我真的想知道处理这种情况的最佳实践是什么.我需要内存中的每个对象(coords模型有~100,000个对象)因为它们都在一个时刻用于在地图上绘制一条轨迹.
我应该如何应对这种超懒加载?
您可以使用此setRelationshipKeyPathsForPrefetching:方法NSFetchRequest.从文档:
预取允许Core Data在单个提取(每个实体)中获取相关对象,而不是在其故障被触发时为每个单独的记录引起对存储的后续访问.
因此,在您可以添加的路径的初始提取请求中
[request setRelationshipKeyPathsForPrefetching:
[NSArray arrayWithObjects:@"segments", @"segments.coordinates", nil]]
Run Code Online (Sandbox Code Playgroud)
(我从未尝试过2级深度,只有一级.)
| 归档时间: |
|
| 查看次数: |
1495 次 |
| 最近记录: |