2009-11-14 94 views
8

我不確定瞬態特性的正確定義:何時應該將CoreData中的瞬態屬性包含在對象模型中?

  1. 可以定義對象模型中的瞬態特性,然後需要在相關的類時,計算它們。如果指定一個類(如實體鏈接到類模型長)定義爲任何瞬態特性任意getter方法沒有對象模型,宣佈它
  2. 但事情一樣好。

我的問題:在對象模型中聲明瞬態屬性有什麼好處? 我只看到一個不利的方面:每次添加一個短暫的財產(例如「FormattedDate」)的persistentStore變得不兼容。

我錯過了什麼?

回答

6

Core Data Programming Guide

如果不支持的屬性是一個對象,然後在管理對象模型,你可以指定其類型爲不確定的,而且它是短暫的。在實現實體的自定義類時,不需要爲該屬性添加實例變量,您可以使用託管對象的私有內部存儲。關於下面描述的實現需要注意的一點是它們緩存瞬態值。這使訪問價值更有效率 - 這也是變更管理所必需的。如果您定義了自定義實例變量,則應該在didTurnIntoFault中清理這些變量,而不是dealloc或finalize。

我認爲這是爲了表示「方便」和「將所有屬性定義在一個地方 - 管理對象模型」。

至於MOM版本中,Core Data Model Versioning and Data Migration Programming Guide說:在版本

核心數據的觀點是,只有在影響持久性模型的功能感興趣。

它沒有明確其對瞬態特性的位置,但是。實際上,闡述該段落的第二個要點幾乎聽起來像是一個矛盾。快速測試(用一個「名稱」屬性的簡單的「富」實體的新項目,保存文件與幾個FOOS,添加臨時屬性,再次運行,並且FOOS所有負載,添加新富,保存,關閉,重新打開)顯示瞬態屬性實際上並未被版本控制系統考慮。

+1

感謝您的澄清。我也再次測試了這一點。我顯然是錯的:向模型添加瞬態屬性不會導致不兼容的商店。似乎也有一個提高效率的論點。我還沒有理解緩存的工作原理。如果我有例如一個CLLocationCoordinate2D屬性,並且getter方法只是從兩個雙lat/long創建它,Core-Data如何緩存結果值? – FelixLam 2009-11-14 18:33:20

+0

不知道,但是這可能是值得測試:「有兩個用於獲取和設置瞬時值的兩個策略可以獲取臨時值不是‘懶惰’......或awakeFromFetch期間......這可能是最好如果值很大,則可以長時間檢索它...對於永久值,可以在每次瞬變值更改時更新它(...,或者可以推遲更新直到保存對象...「(修剪以適合) – 2009-11-14 20:08:00

相關問題