什么是核心数据故障?

时间:2013-01-31 20:20:35

标签: ios macos cocoa core-data

任何人都能解释一下coredata断层是什么意思吗?我明白这是一种减少记忆的机制。但我的问题是,如果我们尝试使用故障对象时,是否需要调用任何刷新方法或者CoreData会为我们选择值?如果CoreData为我们处理它,如果从实际持久存储中删除故障对象并且我们尝试通过故障对象访问它会发生什么?它会抛出任何异常吗?

3 个答案:

答案 0 :(得分:20)

在核心数据中,错误是占位符或“未实现的对象”。它们是引用其他NSManagedObjects的小对象,只有在需要时才会将其提取到内存中。此错误机制旨在增强性能并减少内存使用。

一般来说,断层机制是透明的;当您从NSManagedObjectContext(MOC)中检索对象时,您无法判断(在正常使用过程中)它是故障还是已实现的对象。在大多数情况下,当有必要时,故障将由核心数据框架自动转换为已实现的对象(“触发”),例如,访问对象的属性时。如果你需要自己解决一个错误,可以通过调用带有nil参数的willAccessValueForKey:方法来实现。

答案 1 :(得分:3)

Dhruv的精彩回答!在回答您的最后一个问题时,如果您尝试访问首先出现故障然后删除的托管对象,您将看到NSObjectInaccessibleException并显示消息“Core Data无法解决故障”

答案 2 :(得分:2)

来自Coredata参考:

  

Faulting可减少应用程序消耗的内存量。一个   fault是占位符对象,表示托管对象   还没有完全实现,或者是一个集合对象   代表一种关系。