陈旧时间区间的优点是什么?

时间:2010-06-11 11:41:32

标签: iphone core-data

当提取托管对象,并且过期间隔设置为5分钟时,10分钟后,当我访问该对象的属性时会发生什么?

Core Data会执行新的获取请求吗?那有意义吗?我想不出数据已被缓存但对象是错误的情况。什么时候会发生这种情况?

2 个答案:

答案 0 :(得分:3)

来自Core Data Programming Guide: Using Managed Objects

  

注意对象的陈旧性   interval是必须通过的时间   直到商店重新取货   快照。因此,这只会影响   发射故障 - 此外它只是   与SQLite商店相关(另一个   商店永远不会重新取货,因为   整个数据集保存在内存中。

它只影响完整的成熟对象 - 它不会影响那些有缺陷的对象(即没有填充属性的“幽灵对象”)。

你真的只需要在复杂的设置中摆弄这个,你可以在多个上下文中同时更改商店。在iOS应用程序上,这很少需要。

答案 1 :(得分:1)

如果有问题的对象不是故障,而是一个完全实现的对象(它的属性已被填充),那么如果在10分钟内访问该对象的属性,则不会发生任何事情。

stalenessInterval仅影响故障对象。如果您有这样的对象,并且您通过访问属性来启动实现故障,则Core Data可以从其内部缓存或持久性存储中获取属性值。如果自从上次从存储中获取以来stalenessInterval中的时间已经过去,则将从存储中提取属性值,否则从缓存中获取,这要快得多。

是的,可能存在数据已经缓存且对象出错的情况。您可以通过修剪对象图来打破关系强参考周期来自己完成此任务。

  

当您在托管对象之间建立关系时,每个对象都会对与其相关的一个或多个对象保持强引用。这可能会导致强大的参考周期。为确保引用周期被破坏,当您完成对象时,可以使用托管对象上下文方法refreshObject:mergeChanges:将其转换为错误。