2010-10-19 82 views
2

核心數據文檔說明如果需要,對象可能會出錯以節省內存。如果您的對象具有不屬於託管屬性的屬性,會發生什麼情況?具有非託管屬性的託管對象是否有錯誤?

例如,假設您有一個Department類,即NSManagedObject的子類。它有一個位置iVar +訪問器。 location屬性不是Department的一個屬性;它不受管理,永遠不會持續。

如果您有一個Department對象數組,或與Department具有一對一關係的Employee對象,Department有可能會出錯嗎?如果您設置了Department.location,您是否可以確定該位置將始終存在,或者該部門是否有可能會發生故障,然後您將丟失存儲在該位置的值?

回答

1

該部門仍然有可能發生故障,它只會違反您在模型中描述的屬性。通常情況下,您所描述的情況由「瞬態」屬性覆蓋,這些屬性不是存儲在CoreData中的屬性,但是對象模型知道它們。

當您實現瞬態屬性時,您提供了爲該屬性提供值所需的存儲(或計算)。

在你的情況下,假設你的「位置」值將來不會存在,因爲只有當實際的管理對象留在內存中時,它纔會存活。換句話說,任何導致被管理對象被釋放的動作,例如上下文重置,保存或從保存通知中更新都可能導致該值丟失(因爲它所連接的被管理對象變成了故障或失效)。

1

我不會相信非託管數據留在那裏。即使現在這樣做,這種行爲在未來可能也會改變。更重要的是,從體系結構上講,我不建議在託管對象中保留非託管數據。你最好:

  1. 使其成爲管理數據,或者
  2. 使從管理數據的非託管數據可計算的,或
  3. 製造具有非託管數據和部門作爲實例變量的對象。
+0

使用2.上面,我用瞬態屬性來存儲位置值;似乎工作正常。任何人使用不同的方法? – petert 2010-10-20 08:16:51

相關問題