NSManagedObject 的保留周期仍然可能吗?

kas*_*kad 5 core-data ios

根据文档,我们必须担心一些事情:内存泄漏。https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdMemory.html

\n\n
\n

打破关系强引用循环

\n\n

当托管对象之间存在关系时,每个对象都会维护对其相关的一个或多个对象的强引用。这可能会导致强引用循环。为了确保引用循环被打破,当您完成一个对象时,您可以使用托管对象上下文方法refreshObject:mergeChanges:将其转换为错误。

\n\n

您通常使用refreshObject:mergeChanges: 刷新托管对象\n\xe2\x80\x99s 属性值。如果 mergeChanges 标志为 YES,则该方法将对象 xe2x80x99s 属性值与持久存储协调器中可用对象的属性值合并。但是,如果该标志为 NO,则该方法只是将对象恢复为故障而不进行合并,这会导致它破坏对相关托管对象的强引用。这会打破该托管对象与其他托管对象之间的强引用循环。

\n\n

当然,请注意,在解除分配托管对象之前,必须没有对其的强引用,包括来自 Core Data 外部的强引用。另请参阅更改和撤消管理。

\n
\n\n

但。没有任何 Apple 的代码示例可以解决此问题。\n我检查了 TopSongs、iPhoneCoreDataRecipes、CoreDataBooks、ThreadedCoreData 示例项目,但没有一个涉及此问题。这是否意味着现在对象关系很弱?

\n

Mar*_*rra 1

客体关系并不弱。然而,我们现在使用 ARC 来处理所有事情,它知道如何正确处理这些引用循环。

注意:该文档已过时,我建议阅读更新后的指南。