核心数据 "garbage collection"

Core Data "garbage collection"

CoreData 是否提供类似于垃圾收集(或引用计数)的东西,以便实体可以自动从持久存储中删除,如果它们没有被其他实体引用?

一般而言,实体是 "root entities"。一旦创建,它们将一直存在,直到被明确删除。

但是,我想将一些实体标记为不是根实体。这些应该只存在于另一个实体引用它们并最终被根实体引用的情况下。

作为一个具体的例子,也许用户实体有很多(可能是共享的)文档实体。 User 被标记为 root 并存在直到明确删除。 Document 未被标记为 root,并且只有在一个或多个 User 引用它时才存在。

谢谢。

Core Data 具有上述删除规则。您可以在 UserDocument 之间的关系上设置删除规则,以便在删除 User 时,任何关联的 Document 实体都将被删除。

这不是 "garbage collection",因为这意味着释放不再使用但参照完整性管理的内存,以便数据存储没有悬空实体。然而,由开发人员使用对象模型编辑器定义规则。

If the documents relationship on User specifies Cascade, and a Document is shared by a group of User, will it be deleted if any User referencing it is deleted? Or is it only deleted when the last User referencing it is deleted?

如果您有多对多并设置了级联那么是的,它会删除第一个被删除的父级上的子级。如果您需要在没有引用时删除子项,那么您将需要在父实体的子类中的代码中处理它。我建议查看 -prepareForDeletion 方法。