gpt4 book ai didi

Cocoa 键值编码和逆关系属性

转载 作者:行者123 更新时间:2023-12-03 17:17:20 24 4
gpt4 key购买 nike

我试图弄清楚 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 和运行时来实现此目的,还是需要核心数据?

预先感谢您的帮助。

编辑有点不相关但也很重要,在我的代码中,我将员工的属性(property)作为保留放入部门,但我想知道这是否会导致保留周期?

最佳答案

键值编码中没有任何东西可以直接帮助您维护逆关系。不过,您可以利用键值观察来做到这一点。

您想要做的主要事情是:

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

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

关于Cocoa 键值编码和逆关系属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3278238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com