【问题标题】:Memory leak into permanent storage内存泄漏到永久存储中
【发布时间】:2011-10-23 11:37:24
【问题描述】:

我继承了另一个团队编写的使用 Core Data 的 iPhone 应用程序代码。在查看对象之间的关系以及如何在代码中创建/使用对象时,我意识到永久存储中存在内存泄漏。果然,当我从核心数据中删除所有顶级对象时,对象留下的地方。更重要的是,有一个操作将一个对象的值/关系复制到另一个对象,这会在 Core Data 中留下孤立的对象。

我已经解决了这些问题,Core Data 中不再存储任何新的孤立对象。现在的问题是,如何从已经使用泄漏应用程序的现有用户的永久存储中删除这些孤立对象,谁知道呢?

我最初的想法是将顶级对象复制到另一个 ManagedObjectContext。然后从原始上下文中删除所有对象。最后将顶层对象复制回原始上下文。有人对此有任何问题或有更好的主意吗?

【问题讨论】:

    标签: iphone core-data memory-management memory-leaks


    【解决方案1】:

    孤立对象应该有一个空关系,因此您可以只获取该空关系并删除返回的对象。

    您可能想要更新数据模型以防止孤立对象。孤儿通常是设计不良模型的标志。确保所有关系都具有互惠关系,并在适当的时候建立必要的关系。您还可以添加验证以防止孤儿。

    【讨论】:

    • 您说得对,数据模型是问题的一部分。他们将一些关系设置为 Nullify 而不是 Cascade。我很好奇你所说的验证是什么意思。验证方式?
    • 我同意获取空关系。对于验证,他的意思是您可以覆盖托管对象类的 validateFor<...> 插入、更新、删除,并在其中放置一些逻辑。如果失败,则不会保存对象,您可以选择构建和引发您自己的错误消息,例如“无法保存对象,因为...的孤儿”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 2012-07-16
    • 1970-01-01
    相关资源
    最近更新 更多