2010-06-11 108 views
1

当提取一个托管对象并将过期时间间隔设置为5分钟时,在访问该对象的属性10分钟后会发生什么?什么是陈旧时间间隔?

将核心数据,然后进行全新的读取请求?那有意义吗?我无法想象数据已经被缓存但对象是错误的情况。什么时候可以发生?

回答

3

Core Data Programming Guide: Using Managed Objects

注意,对象的过时 间隔是具有传递 ,直到存储的时间重新抓取 快照。因此,这不仅影响 发射断层,而且目前只 相关SQLite的商店(其它 商店永不再取,因为 整个数据集保存在内存中)。

它只会影响完全成熟的对象 - 它不影响那些故障

你真的只需要一个复杂的设置与此拨弄(即“鬼对象”,没有填充属性。)你有多个上下文全部同时更改商店。在iOS应用中,这很少需要。

+0

现在的困惑 - 我以为故障是鬼? – dontWatchMyProfile 2010-06-11 13:08:52

+2

他们是。但是,“解决故障”意味着填充对象属性。如果故障是“鬼怪”,那么“发动故障”和“故障”都意味着“物化”或“制造混凝土”。这个术语经过几十年的发展而变得相当混乱。许多作家把它倒退,这使情况变得更糟。 – TechZen 2010-06-11 17:13:48

+0

我编辑了答案,以澄清故障和鬼魂是一回事,所以dontWatchMyProfile的反应现在看起来可能很奇怪。 – Felixyz 2011-02-01 13:17:19

1

如果有问题的对象不是故障,而是一个完全实现对象(它的属性已填充),如果您在10分钟内访问该对象的属性,然后会发生什么。

stalenessInterval只影响故障的对象。如果您有这样一个对象,并且您通过访问某个属性来初始化某个错误,则Core Data可以从其内部缓存或持久存储中获取属性值。如果自从上次从存储中获取后stalenessInterval中的时间已过,则将从存储中获取属性值,否则 - 从缓存中获取属性值,速度要快得多。

是的,有可能的情况下,当数据已经被缓存,对象是一个错误。您可以通过修剪对象图来解决强关联强参考周期。

当您在托管对象之间存在关系时,每个对象都会维护对其所关联的一个或多个对象的强引用。这会导致强烈的参考周期。为了确保参考周期被破坏,当完成一个对象时,可以使用托管对象上下文方法refreshObject:mergeChanges:将其变为故障。