获取属性v关系(核心数据 - iPhone)

时间:2009-11-15 12:25:19

标签: iphone objective-c core-data lazy-loading

我是一名新的iPhone开发人员(大约4个月左右),他开始关注核心数据。

在Dave Mark的“Beginning iPhone 3 Development”一书中,它提到了获取的属性和关系之间的主要差异,即获取的属性允许延迟加载。但是,我在本网站上看到了其他资源和接受的答案,表明关系确实允许延迟加载。

例如,如果我有一个与Employee具有多对多关系的Department对象,那么我不希望给定部门的提取将所有关联的员工加载到内存中。

我非常感谢关于这一点以及其他差异的权威答案,因为它对任何设计都有明显的影响。

另外,如果有人能指出我合理的核心数据资源是一个明确且初学者友好的指南(我以前是一名Java开发人员,但我是iPhone-Way的新手......),我将非常感激... < / p>

3 个答案:

答案 0 :(得分:12)

从“核心数据编程指南”中,获取的属性表示“弱的单向关系”。它们只是允许您使用fetch谓词定义属性的值,而不是像关系一样直接对其进行建模。

一个主要区别是获取的属性不像直接关系那样是实时的或动态的。当对象图中发生将影响fetched属性值的更改时,必须通过手动刷新包含fetched属性的对象来显式保持已获取的属性。

答案 1 :(得分:5)

在核心数据中查看faulting

使用错误,如果从持久性存储中检索单个Employee对象,则其管理器,部门和报告关系最初由故障表示。虽然故障是Department类的一个实例,但尚未实现 - 它的持久性实例变量都没有设置。

如果你向Department对象发送一条消息来获取它的名字,那么故障就会触发 - 在这种情况下,Core Data会为你执行一次获取来检索所有对象的属性。 < / p>

答案 2 :(得分:2)

我强烈推荐Marcus Zarra撰写的Core Data。几个月前我选择了它,虽然假设你有一些Objective-C经验,但对于初学者来说也是如此。