【发布时间】:2010-06-11 07:54:11
【问题描述】:
NSManagedObjectContext 的 -reset 方法的文档令人困惑...
所有接收者的托管对象都是 “忘记了。”如果你使用这种方法, 你应该确保你也 丢弃对任何托管的引用 使用接收器获取的对象, 因为之后它们将无效。
那是什么意思?当我从持久存储中获取任何对象,然后重置我的上下文时,我将如何“丢弃引用”?为什么我必须这样做?
【问题讨论】:
NSManagedObjectContext 的 -reset 方法的文档令人困惑...
所有接收者的托管对象都是 “忘记了。”如果你使用这种方法, 你应该确保你也 丢弃对任何托管的引用 使用接收器获取的对象, 因为之后它们将无效。
那是什么意思?当我从持久存储中获取任何对象,然后重置我的上下文时,我将如何“丢弃引用”?为什么我必须这样做?
【问题讨论】:
如果您在代码中的某处从商店获取 NSManagedObject,然后在其他地方重置上下文,现在您更改 ManagedObject 并尝试通过上下文将其持久保存到商店(已重置并且没有引用任何对象)它会使您的应用崩溃。
上下文是一个“便签本”,它可以“访问”商店中的所有东西,但它只处理/已绘制的对象,您在应用程序启动后通过它检索到的对象。 当您读取 NSManagedObject 时,上下文(据我所知)会复制并跟踪您对其所做的所有更改,在您持久保存之前它对存储没有任何作用。这就是核心数据中的内存管理和撤消重做等轻松实现的原因。
因此重置上下文也会丢弃这些更改,并且没有任何东西可以保存到存储中。
编辑://添加
你不应该太在意的参考。您不必释放它或类似的东西,Core Data 会处理这些,只是不要引用 ManagedObject,自动释放池将丢弃它。
【讨论】: