如何处理核心数据保留周期

时间:2012-09-27 15:06:35

标签: iphone ios core-data memory automatic-ref-counting

核心数据指南建议您使用逆向建模关系。没问题。

有趣的是,如果加载一个与B有很多关系的对象A并遍历对象图,你最终会得到一个保留周期,并且永远不会释放内存。

对于一个简单的对象图,你可以调用refreshObject:mergeChanges:on A来重新排除对象的错误,使关系不再是强引用。

如果你有一个复杂的对象图,虽然这很痛苦,因为你需要在你触摸的每个对象上调用它。在使用核心数据时,这似乎是一个非常重要的考虑因素,但在Apples文档中只有一个关于此主题的段落。

我只是想知道别人怎么处理这个?长时间运行的应用程序会慢慢消耗越来越多的内存而不需要某种手动过程来强制对象恢复故障。

是否有任何已知的处理方式。我想是的,因为很多人使用Core Data我找不到任何建议

1 个答案:

答案 0 :(得分:1)

在进行断言时,您忽略了核心数据的几个方面。如果你获取一个对象,让我们说对象A,它与对象B有一对多的关系,当你获取A时,你将拥有B上与A相关的所有对象。一对多的关系创建了与A相关的对象列表,并在NSManagedObject子类的NSSet属性中包含它们。请注意,这些对象处于故障状态,因此内存占用空间微不足道。如果您操纵关系中的对象,核心数据将在必要时展开这些对象。您无需执行任何操作即可获得此行为。如果您想自己触发错误行为以再次将对象发送到错误,则可以使用refreshObject:mergeChanges:。如果您没有将它们发回故障,最终将再次触发故障行为。