gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:48:29 24 4
gpt4 key购买 nike

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

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

对于简单的对象图,您只需在 A 上调用 refreshObject:mergeChanges: 来重新创建对象,这样关系就不再是强引用了。

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

我只是想知道其他人是如何处理这个问题的?长时间运行的应用程序会慢慢地消耗越来越多的内存,而无需某种手动过程来强制对象恢复到错误状态。

是否有任何已知的模式来处理这个问题。我想是的,因为很多人都在使用 Core Data,所以我找不到任何建议

最佳答案

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

关于iphone - 如何处理核心数据保留周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12624478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com