Cocoa键值编码和反向关系属性

我试图弄清楚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
但是我想知道这是否会导致保留周期?     
已邀请:
键值编码中没有任何内容可以帮助您维持反向关系。但是,您可以利用键值观察来实现此目的。 你要做的主要事情是: 实现自己的类等效于NSManagedObject,而不是直接为您的实体类继承NSObject,因为毕竟不能保证任意NSObject子类将与您提出的系统一起使用。 (或者,您可以在协议中编写所需的所有内容.EOF使用EOEnterpriseObject协议执行此操作。) 实现自己的类等效于NSManagedObjectContext来处理实体类实例的观察,因此它可以告诉它们在适当的时候进行反向维护。请注意,由KVO触发的反向维护不需要重新触发KVO,这将触发反向维护等。 实现与NSManagedObjectModel等效的自己的类层次结构,这样您的NSManagedObjectContext的等价物就知道实体类的实例的哪些属性可以具有反向关系,以及它们是什么。 鉴于所有这些,您可能只想使用Core Data,因为它已经完成了所有这些并且多年来已经进行了广泛的调整以完成它。     

要回复问题请先登录注册