2015-03-02 48 views
1

CoreData是否提供類似於垃圾回收(或引用計數)的東西,以便實體可以自動從持久存儲中刪除(如果它們未被其他實體引用)?核心數據「垃圾回收」

一般來說,實體是 「根實體」。一旦創建,它們將存在,直到明確刪除。

不過,我想將某些實體不是根實體。這些應該只存在於另一個實體引用它們,最終由根實體引用它們。

作爲具體例子,也許用戶實體已經許多(可能共享)文獻實體。 用戶被標記爲並存在,直到明確刪除。 文獻不被標記,和只存在所提供的一個或多個用戶參考它。

謝謝。

+0

通過「刪除實體」,您是指將它們從內存或持久性存儲中刪除? – 2015-03-02 12:50:42

+0

謝謝 - 後者。將更新。 – Benjohn 2015-03-02 12:57:34

+0

看起來我需要閱讀刪除規則。並且不支持共享實體的可能自動刪除。 – Benjohn 2015-03-02 14:19:44

回答

1

核心數據有提到刪除規則。您可以設置在UserDocument之間的關係的刪除規則,以便當User被刪除任何相關Document實體將隨之被刪除。

這不是「垃圾收集」作爲意味着不再被使用,但參照完整性管理,使數據存儲沒有晃來晃去實體釋放內存。然而,開發人員需要定義使用對象模型編輯器的規則。

如果User上的文檔關係指定Cascade,並且文檔被一組用戶共享,那麼如果刪除了任何引用它的用戶,它將被刪除嗎?或者只有當最後一個引用它的用戶被刪除時才被刪除?

如果您有多對多並設置級聯,那麼是的,它會刪除被刪除的第一個父級上的子級。如果您需要在沒有引用的情況下刪除子代,那麼您需要在父實體的子類中的代碼中處理該代碼。我建議看看-prepareForDeletion方法。

+1

謝謝。 (我應該說「自動內存管理」,因爲這並不意味着管理機制)。如果'User'上的'documents'關係指定'Cascade',並且'User'由'User'組共享**,如果任何'User'引用它被刪除,它將被刪除嗎?或者只有當最後一個'User'引用它被刪除時纔會被刪除? – Benjohn 2015-03-04 16:21:24

+1

如果您有多對多並設置了級聯,那麼是的,它會刪除被刪除的第一個父級上的子級。如果您需要在沒有引用的情況下刪除子代,那麼您需要在父實體的子類中的代碼中處理該代碼。我會建議看看'-prepareForDeletion'方法。 – 2015-03-04 19:40:41

+0

順便說一句,「自動內存管理」也意味着管理:) – 2015-03-04 19:41:23