根据文档,我们有一些麻烦:内存泄漏。 https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdMemory.html:
打破关系强参考周期
当您在托管对象,每个对象之间建立关系时 保持对它所对象或对象的强引用 有关。这可能会导致强大的参考周期。为了确保 当你完成一个物体时,参考周期就会被打破 可以使用托管对象上下文方法refreshObject:mergeChanges: 把它变成一个错误。
您通常使用refreshObject:mergeChanges:刷新托管 对象的属性值。如果mergeChanges标志为YES,则为方法 将对象的属性值与可用对象的属性值合并 在持久性存储协调器中。但是,如果标志为NO,则 方法只是将一个对象转换回一个没有合并的错误,这就是 导致它破坏对相关托管对象的强引用。这个 打破了该托管对象与该托管对象之间的强引用循环 其他管理对象。
注意,当然,在可以在那里取消分配托管对象之前 必须没有强烈的参考,包括来自Core之外 数据。另请参阅更改和撤消管理。
但是。没有任何Apple代码示例可以解决此问题。 我已经检查过TopSongs,iPhoneCoreDataRecipes,CoreDataBooks,ThreadedCoreData示例项目,但是他们都没有关注这个问题。是否意味着对象关系现在很短暂?
答案 0 :(得分:1)
对象关系并不弱。但是,我们现在正在使用ARC,它知道如何正确处理这些参考周期。
注意:该文档很旧,我建议您阅读更新的指南。
答案 1 :(得分:1)
关系不是weak
,并且新文档中没有任何内容表明核心数据在保留周期中是安全的。事实上,"Turning Object into Faults"下的第一段专门提到了强参考周期:
将已实现的对象转换为错误可能有助于修剪对象图,以及确保属性值是最新的。将托管对象转换为故障会释放不必要的内存,将其内存中的属性值设置为nil,并中断对相关对象的强引用。 (请参阅减少内存开销并确保数据是最新的)