从托管对象上下文中删除后使用保留的 NSManagedObject 是不是安全?

Posted

技术标签:

【中文标题】从托管对象上下文中删除后使用保留的 NSManagedObject 是不是安全?【英文标题】:Is it safe to use a retained NSManagedObject after removal from managed object context?从托管对象上下文中删除后使用保留的 NSManagedObject 是否安全? 【发布时间】:2011-03-08 09:25:52 【问题描述】:

我有一个 NSManagedObject,它只有属性(没有获取的属性或关系)。我保留实例,告诉托管上下文从图中删除对象,我保留托管上下文。

从托管上下文中删除后使用实例是否安全?

一步一步:

->retain NSManagedObject
->remove NSManagedObject from managed object context
->persist changes to the managed object context
->use NSManagedObject

【问题讨论】:

【参考方案1】:

我不相信。一个 NSManagedObject 属于商店。您使用商店来创建和销毁它。如果您决定不这样做,请务必谨慎,因为正如 NSManagedObject 文档所说,“重要的是要记住 Core Data 保留对托管对象的生命周期(即原始内存管理)的独占控制权。”

->remove NSManagedObject from managed object context

这不是意味着对象还是被释放了吗?当然你可以从那时起忽略它而不会泄漏。

因为您有一个只有属性的简单对象,如果您需要保留它们,只需复制它们即可。

【讨论】:

【参考方案2】:

请记住,如果您保留了一个对象,则您有责任释放它。至于一个已删除的对象:您仍然会有一个非零的保留计数,但您必须采取措施不使用它,因为它会导致“Core Data could not fulfill a fault”消息(参见this)

【讨论】:

以上是关于从托管对象上下文中删除后使用保留的 NSManagedObject 是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

一个托管对象上下文的两个持久存储 - 可能吗?

如何“告诉”父上下文必须删除和/或插入哪些托管对象?

如何安全地删除未保存的托管对象?

从视图控制器传递后传递的托管对象上下文为空

即使删除后,已删除的 NSManagedObject 仍保留在内存中

从列表中的对象中删除字节顺序标记