【问题标题】:Should CoreData inverse relationships be represented as retained properties?CoreData 逆向关系是否应该表示为保留属性?
【发布时间】:2011-12-18 06:37:48
【问题描述】:

我有两个实体(会话和用户)。会话实体与用户实体有loggedInUser 关系。并且 User 实体与 Session 实体具有会话反向关系。

Xcode 为直接和反向关系生成具有保留属性的属性。 从对象图的角度来看可以吗? 我的理解是反向关系应该表示为assign属性。

此外,在模式编辑器中,哪个关系是主要关系是不可见的(即,loggedInUser 将 session 作为其逆,而 session 的逆是 loggedInUser)。

也许我错过了什么?

谢谢。

【问题讨论】:

  • main 关系是什么意思?关系对双方都很重要。一个session 有一个user,或者相反,一个user 有一个session。为什么一个方向比另一个更重要?
  • 我的意思是在我的设计中 Session 是父对象,而用户是它的子对象。否则会有retain loop。

标签: ios core-data memory-management retain object-graph


【解决方案1】:

除了Core Data state 的 Apple 文档之外,并没有真正解释原因

除了始终是非原子的之外,动态属性仅支持保留或复制属性——assign 被视为保留。您应该谨慎使用副本,因为它会增加开销。不能对关系使用复制,因为 NSManagedObject 不采用 NSCopying 协议,它与对多关系的行为无关。

因此,即使您确实将关系设置为assign,它也会被视为retain

【讨论】:

  • 所以,我猜框架会负责正确释放对象(避免保留循环)。谢谢你带来这个。
  • 另一个问题是 Xcode 4.2 在启用 ARC 的情况下生成“保留”而不是“强”。你认为我应该把它改成“强”吗?
  • Core Data 不会避免保留周期。当你遍历一个循环时,你必须通过使用-refreshObject:mergeChanges: 修剪树来自己管理它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多