2

Core Data 文档说,如果需要,对象可能会因节省内存而出错。如果您有一个对象的属性不是托管属性,会发生什么?

例如,假设您有一个 Department 类,它是 NSManagedObject 的子类。它有一个位置 iVar + 访问器。location 属性不是 Department 的属性;它不受管理,也从未持续存在。

如果您有一个 Department 对象数组,或者一个与 Department 一对一关系的 Employee 对象,那么 Department 是否有可能出错?如果你设置了Department.location,你能确定这个位置会一直在那里吗,还是有可能是Department出错了,那么你就丢失了存储在location中的值?

4

2 回答 2

1

部门仍然可能出错,它只会出错您在模型中描述的属性。通常,您所描述的情况由“瞬态”属性覆盖,这些属性是未存储在 CoreData 中的属性,但是对象模型知道它们。

当您实现一个瞬态属性时,您提供了为该属性提供值所需的存储(或计算)。

在您的情况下,假设您的“位置”值将来不会存在是完全合理的,因为它只会在实际托管对象保留在内存中时才存在。换句话说,任何导致托管对象被释放的操作,例如上下文重置、保存或从保存通知更新都可能导致值丢失(因为它所绑定的托管对象变成故障或无效)。

于 2010-10-20T08:00:46.533 回答
1

我不相信非托管数据会保留在那里。即使现在这样做了,将来的行为也可能会发生变化。更重要的是,在架构上我不建议将非托管数据保留在托管对象中。你最好:

  1. 使其成为托管数据,或者
  2. 使非托管数据可从托管数据中计算,或者
  3. 制作一个具有非托管数据和部门作为 ivars 的对象。
于 2010-10-19T23:30:46.093 回答