【发布时间】:2012-09-19 10:07:26
【问题描述】:
核心数据指南建议您使用逆向建模您的关系。没有问题。
有趣的是,如果您加载一个与 B 具有多对多关系的对象 A 并遍历对象图,您最终会得到一个保留循环并且内存永远不会被释放。
对于简单的对象图,您只需在 A 上调用 refreshObject:mergeChanges: 即可重新故障对象,从而使关系不再是强引用。
如果你有一个复杂的对象图,虽然这很痛苦,因为你需要在你接触过的每个对象上调用它。在使用核心数据时,这似乎是一个非常重要的考虑因素,但 Apple 文档中只有一段关于此主题。
我只是想知道其他人如何处理这个问题?一个长时间运行的应用程序会慢慢地消耗越来越多的内存,而不需要某种手动过程来强制对象恢复故障。
是否有任何已知的模式来处理这个问题。我想是这样,因为很多人都使用 Core Data,所以我找不到任何建议
【问题讨论】:
-
很多人使用核心数据,你是对的。它已经存在多年了。您需要在第二段中检查您的断言。是这样吗?如果这是核心数据的缺陷,人们会谈论它,你不觉得吗?
-
这是苹果文档中所述的行为。这里还有另一个堆栈溢出问题:stackoverflow.com/questions/1789974/core-data-and-retain-cycles。 Apple 文档也这样说:developer.apple.com/library/mac/#documentation/cocoa/Conceptual/…。也许我误解了这一点,但我不明白怎么做?
-
我并不是说这是一个缺陷,因为他们指定了一种打破保留周期的方法,我更想知道当你有一个大对象图或任何特定的核心数据使用时是否有更好的方法来做到这一点避免/减少这种情况的模式。
-
是的,正如我在帖子中提到的那样。
-
我在看同样的东西。打破保留周期似乎是一种非常糟糕的方法。它需要在其他情况下不需要的明确干预。我相信您还需要确保在调用此对象之前该对象没有未保存的数据。
标签: iphone ios core-data memory automatic-ref-counting