为什么NSManagedObject实例没有强大的NSManagedObjectContext引用?

jsa*_*ler 9 core-data objective-c nsmanagedobject nsmanagedobjectcontext ios

正如另一个关于SO(以及Apple文档)的问题所指出的,NSManagedObject实例并没有强烈提及NSManagedObjectContext它们的起源.乍一看,这似乎是一个奇怪的决定,因为NSManagedObject如果没有它们context,实例几乎是无用的,因为它会导致混乱的错误,例如在它们应该的时候没有发射的错误.

任何人都可以提供一些背景知道为什么会这样吗?实现一个NSManagedObject自动保存对它的强引用的子类是否危险NSManagedObjectContext

编辑:由于这个问题的很好的答案,我发现我的托管对象是NSManagedObjectContext由RestKit 故意临时创建的.这是我的下一个问题,特别是RestKit,这里.

Sco*_*ets 7

NSManagedObjectContext拥有它的NSManagedObjects比使用其他方式更有意义.

请记住,上下文就像一个绘图板,上面有所有对象.如果该上下文消失,则对象不再有效.如果对象拥有上下文,那么上下文将不会对对象做任何事情,并且它们看起来仍然有效.换句话说:没有对象就可以存在上下文,没有上下文就不能存在对象.

当然,混合模型(其中上下文拥有其对象和对象拥有其上下文)也不会起作用,因为那样您将遇到保留周期.

没有上下文,NSManagedObject实例几乎无用

它们可以(但不一定),但请记住它们确实有对它们的上下文的引用!据推测它是一个弱参考,但仍然是一个参考.如果该引用返回nil,则该对象无效.如果你确保你的背景保持不变(这是我在回答另一个问题时所做的),你将不会有任何问题.