必须为 NSFetchedResultsController 提供 cacheName 有什么意义?

don*_*ile 5 iphone core-data

NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:moc sectionNameKeyPath:nil cacheName:@"Root"];
Run Code Online (Sandbox Code Playgroud)

为什么我们必须考虑缓存名称?这个决定有多重要?如果有两个 NSFetchedResultsController 实例使用完全相同的 cacheName 会发生什么?那有关系吗?那是某种单身人士的东西吗?

考虑到 Core Animation,还有这个奇怪的 animationID 参数,但将它设置为完全相同的东西,同时几十个动画并不会影响动画。所以我想这可能是同样的事情……或者不是?

Mar*_*rra 5

如果您有UITableView数百个对象,则缓存非常重要,因为它会将加载时间从几秒更改为几毫秒。诀窍是缓存与其NSPredicate. 如果您更改谓词,则会重建缓存。如果您NSPredicate不断更改,则缓存无用。

如果您有一个与其一致的表视图,NSFetchRequest那么缓存将大大提高性能。

更新

批量大小在您设置时确定,并且仅在必须返回到持久存储时才适用。如果缓存中有数据,那么它将首先被命中,根据我的经验,批处理大小将被忽略。