【问题标题】:Reference count of Managed Objects托管对象的引用计数
【发布时间】:2012-05-14 16:20:48
【问题描述】:

我有一个类A(NSManagedObject 的子类),它有一个类B(也是NSManagedObject 的子类)的属性,属性是@synthesize 而不是@dynamicAB 在我的模型中,我只希望 A 在他(A)还活着的时候保持对 B 对象的引用。
(当我第一次从数据库中获取对象A 时,他的B 属性为空)

我重写了B 属性getter,所以当第一次调用时,他将从db 中获取B 对象。

现在我需要保留B的获取结果吗?
我想我听说保留 NSManagedObjectContext 管理的对象不是一个好主意。

【问题讨论】:

    标签: objective-c core-data nsmanagedobjectcontext reference-counting retaincount


    【解决方案1】:

    保留NSManagedObject 没有问题——继续做吧。唯一需要注意的是,如果您持有一个对象并且它被删除。然后你有一个对象的引用,但如果你试图读取或设置它的任何值,你会得到一个异常。因为这很难更新,所以当您使用 Core Data 关系时,Core Data 会为您删除传播。

    因此,如上所述:使用关系。 A 和 B 之间有多个关系并没有错。你也需要相应的逆关系。

    例如,你可以这样做:

    Person
      favoriteBook (to-1, inverse is favoriteByPersons)
      authoredBooks (to-many, inverse is authors)
    
    Book
      authors (to-many, inverse is authoredBooks)
      favoriteByPersons (to-many, inverse is favoriteBook)
    

    让 Core Data 为您完成繁重的工作。关系管理是 Core Data 真正擅长的事情之一。不要试图自己复制。

    【讨论】:

    • 谢谢 :) 我不知道我可以与同一个实体建立两个关系。
    【解决方案2】:

    您显然应该在 A 和 B 之间建立一对一的关系。这就是 Core Data 为您管理的内容。它更简单、更健壮,而且您不必担心内存问题。

    【讨论】:

    • 问题是我已经在 A 和 B 之间建立了一对多的关系,所以我不能有另一个..
    • 您在问题中写道:“AB 之间没有关系”。那么现在是什么情况?请编辑问题并明确说明您要完成的任务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多