2010-06-11 40 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:將其變爲故障。