受管对象的引用计数

时间:2012-05-05 09:12:23

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

我有类A(NSManagedObject的子类),它具有类B的属性(也是NSManagedObject的子类),属性为@synthesize而不是@dynamic,那里在我的模型中,AB之间没有任何关系,我只希望A保留对B对象的引用,而他(A)是活着。
(当我第一次从db获取对象A时,他的B属性为空)

我覆盖B属性getter,所以在第一次调用时,他将从db中获取B对象。

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

2 个答案:

答案 0 :(得分:2)

保留NSManagedObject没有问题 - 继续这样做。唯一需要注意的是,如果你抓住一个对象并且它被删除了。然后你有一个对象的引用,但如果你试图读取或设置它的任何值,你将得到一个例外。因为更新很棘手,所以当您使用核心数据关系时,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真正擅长的事情之一。不要试图自己复制。

答案 1 :(得分:0)

您应明确选择A和B之间的一对一关系。这就是为您设置Core Data的原因。它更简单,更强大,您不必担心内存问题。