Objective c 托管对象的引用计数

Objective c 托管对象的引用计数,objective-c,core-data,nsmanagedobjectcontext,reference-counting,retaincount,Objective C,Core Data,Nsmanagedobjectcontext,Reference Counting,Retaincount,我有一个类A(NSManagedObject的子类),它的属性是classB(也是NSManagedObject的子类),属性是@synthesis而不是@dynamic,在我的模型中A和B之间没有关系,我只希望A在对象(A)处于活动状态时保留对B对象的引用。 (当我第一次从数据库获取对象A时,他的B属性为空) 我重写了B属性getter,因此当第一次调用时,他将从db中获取B对象 现在是否需要保留B的获取结果? 我想我听说保留NSManagedObjectContext管理的对象不是一个好主意

我有一个类
A
(NSManagedObject的子类),它的属性是class
B
(也是NSManagedObject的子类),属性是
@synthesis
而不是
@dynamic
,在我的模型中
A
B
之间没有关系,我只希望
A
在对象(
A
)处于活动状态时保留对
B
对象的引用。
(当我第一次从数据库获取对象
A
时,他的
B
属性为空)

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

现在是否需要保留
B
的获取结果?

我想我听说保留NSManagedObjectContext管理的对象不是一个好主意。

您应该清楚地使用a和B之间的一对一关系。这是为您设置的核心数据。它更简单、更健壮,而且您不必担心内存问题。

保留
NSManagedObject没有问题
-去做吧。唯一需要注意的是,如果你抓住一个对象,它会被删除。然后你有一个对象的引用,但是如果你试图读取或设置它的任何值,你会得到一个异常。因为这很难更新,所以当您使用核心数据关系时,核心数据确实会为您删除传播

因此,如上所述:使用关系。在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)

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

问题是我在a和B之间已经有了一对多的关系,所以我不能有另一个。.你在你的问题中写道:“
a
B
之间没有关系。”。那么现在是什么呢?请编辑问题并明确指定您想要完成的任务。谢谢:)我不知道我可以与同一实体建立两个关系。