从托管对象上下文中删除后使用保留的 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 是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章