1

我试图弄清楚 KVC 机制在处理相互之间的反向关系的关系属性时是否提供任何帮助。我将使用人为的标准部门/员工示例。

@interface Department : NSObject {
      NSMutableArray *employees;
}
@property (retain) NSMutableArray *employees;
// KVC methods for mutating the employees array

@end


@interface Employee : NSObject {
    Department *department;
}
@property (retain) Department *department;

有了这个(以及省略的 KVC 收集方法),KVC 为管理双向关系提供了什么样的帮助?我现在只是在概念阶段。我知道使用 Core Data 我可以设置显式反向关系,因此当我使用[myDepartment insertObject:newEmployee inEmployeesAtIndex:lastIndex];, 然后newEmployee.department自动设置为myDepartment,但是我可以仅使用 KVC 和运行时来实现这一点,还是我需要 Core Data?

提前感谢您的帮助。

编辑有点不相关但也很重要,在我的代码中,我将 Employee 的属性设置为 Department,retain但我想知道这是否会导致保留周期?

4

1 回答 1

1

Key-Value Coding 中没有任何东西可以直接帮助您保持反向关系。但是,您可以利用 Key-Value Observing来做到这一点。

您要做的主要事情是:

  • 实现您自己的等效于 NSManagedObject 的类,而不是直接为您的实体类子类化 NSObject,因为毕竟您不能保证任意 NSObject 子类将与您提出的系统一起使用。(或者,您可以在协议中编写他们需要的所有内容。EOF 使用 EOEnterpriseObject 协议完成此操作。)
  • 实现您自己的等效于 NSManagedObjectContext 的类来处理对实体类实例的观察,因此它可以告诉它们在适当的时间进行反向维护。注意,由 KVO 触发的逆向维护不需要重新触发 KVO,否则会触发逆向维护等等。
  • 实现您自己的等效于 NSManagedObjectModel 的类层次结构,因此您等效于 NSManagedObjectContext 知道您的实体类实例的哪些属性可以具有反向关系,以及它们是什么。

考虑到所有这些,您可能只想使用 Core Data,因为它已经完成了所有这些,并且多年来经过广泛调整以做得很好。

于 2010-07-19T05:05:47.137 回答