2011-10-31 46 views
8

如果派生屬性是隻讀的,那麼是否有任何理由爲派生屬性建模?在我的自定義類中聲明一個屬性,然後在運行中計算getter中的值似乎更容易一些。我將它與keyPathsForValuesAffecting結合起來,通知觀察者有關更改。 如果我需要緩存,我只需爲該屬性添加一個ivar,並在其中一個基礎值發生變化時重置它(正如this問題的答案中所建議的那樣)。爲什麼我會使用transient屬性來表示核心數據中的派生只讀屬性?

將此建模爲臨時屬性會有什麼優勢嗎?

回答

7

我實際上是在做這件事情,因爲這個引用來自核心數據編程指南,「考慮一個應用程序,其中你有一個具有屬性firstName和lastName的Person實體和一個緩存的瞬態派生屬性fullName」 。我相信我認爲這將是一件好事。它會繼續說:「(實際上它可能不會緩存fullName屬性,但這個例子很容易理解)」,讓我知道這真的只是爲了他們正在描述的例子,但可能不是很好的實施。

因此,在閱讀了更多關於瞬態屬性及其預期用途之後,我意識到這可能是一種使用它們的不好的方式。我沒有從我的實施緩存中獲益。我確實喜歡使用'點'符號(因爲它是一個屬性)的能力,而不必向對象發送消息,但我不相信使用它會有任何性能增益。

更重要的是,我認爲將其作爲託管對象上下文必須跟蹤的屬性的開銷實際上使其成爲一件壞事。

所以,我將重構我的應用程序,現在在我的managedObject實體的子類上創建這些簡單的實例方法,並返回結果,因爲我沒有看到使它們成爲瞬態屬性的真正好處。

原因使用其中之一是,當你實際上需要堅持的東西,不適合一個managedObject類型。但是,你基本上創造了兩個屬性。一種是瞬態的,是對象的真實表示,爲其編寫getter和setter,另一種很可能是僅在覈心數據實體子類內部用於保存其他對象值的二進制數據類型(s)存儲在一個存儲對象中。

至少這是我對這一切如何工作的理解。如果我有這個錯誤,評論是非常受歡迎的,因爲它對我來說也很混亂。

+0

謝謝。我在四處搜尋關於「暫時性財產」和「派生財產」的解釋。你幫我理解了這一點。我同意大多數情況下的用例是:「使用其中一種方法的原因是,您實際上需要堅持某些不適合某種managedObject類型的東西。」 –