【发布时间】:2013-01-16 01:30:22
【问题描述】:
谁能解释一下coredata故障是什么意思?我知道这是一种减少内存的机制。但我的问题是,如果当我们尝试使用错误对象时,我们是否需要调用任何刷新方法或者 CoreData 会为我们选择值?如果 CoreData 为我们处理它,如果故障对象从实际持久存储中删除并且我们尝试通过故障对象访问它会发生什么?它会抛出任何异常吗?
【问题讨论】:
谁能解释一下coredata故障是什么意思?我知道这是一种减少内存的机制。但我的问题是,如果当我们尝试使用错误对象时,我们是否需要调用任何刷新方法或者 CoreData 会为我们选择值?如果 CoreData 为我们处理它,如果故障对象从实际持久存储中删除并且我们尝试通过故障对象访问它会发生什么?它会抛出任何异常吗?
【问题讨论】:
在 Core Data 中,故障是占位符,或“未实现的对象”。它们是引用其他 NSManagedObjects 的小对象,仅在需要时才将其提取到内存中。这种故障机制旨在提高性能并减少内存使用。
一般来说,故障机制是透明的;当您从 NSManagedObjectContext (MOC) 中检索对象时,您无法分辨(在其正常使用过程中)它是错误对象还是已实现对象。在大多数情况下,当需要这样做时,Core Data 框架会自动将故障转换为已实现的对象(“触发”),例如:访问对象的属性时。如果你需要自己触发一个错误,你可以通过调用它的 willAccessValueForKey: 方法和一个 nil 参数来实现。
【讨论】:
来自 Dhruv 的精彩回答!在回答您的最后一个问题时,如果您尝试访问首先出现故障然后被删除的托管对象,您将看到 NSObjectInaccessibleException 和消息“核心数据无法完成故障”
【讨论】:
来自 Coredata 参考资料 (link):
故障会减少您的应用程序消耗的内存量。一种 fault 是一个占位符对象,代表一个托管对象 还没有完全实现,或者是一个集合对象 表示关系。
【讨论】: