【问题标题】:How does Core Data determine if an NSObjects data can be dropped?Core Data 如何确定一个 NSObjects 数据是否可以被删除?
【发布时间】:2010-05-09 10:10:18
【问题描述】:

在我现在正在开发的应用程序中,我在 Core Data 中存储了大约 500 张图像。我现在已经将这些图像提取出来并将它们存储在文件系统中,但在此过程中,我发现如果我有一个包含 500 个对象的数组,其中包含图像数据,则应用程序会在设备上崩溃。具有 500 个对象 ID 的数组以及这些对象中的图像数据工作正常。没有图像数据的 500 个对象也可以正常工作。我发现将对象 ID 数组和图像数据存储在文件系统而不是核心数据中时,我获得了最佳性能。

我得出的结论是,如果我在数组中有一个对象告诉 Core Data 我正在“使用”该对象,Core Data 将保留数据。这是正确的吗?

【问题讨论】:

    标签: iphone objective-c core-data


    【解决方案1】:

    简短的回答是肯定的。

    长答案是它取决于图像的大小。规则是:

    • 不到 100kb 将其存储在主表中。
    • 不到 1mb 将其存储在关系另一端的辅助表中。
    • 大于 1mb,将其存储在磁盘上并通过文件路径引用。

    因此,取决于文件的大小,将决定将它们存储在何处。另外,请记住 UIImage 处理缓存,因此您可能根本不需要将图像存储在数组中。

    更新

    那你的问题还不清楚。您不需要将图像存储在数组中,因为 A) 图像由单元保存,并且; B) UIImage 将为您缓存图像,因此如果最近访问过它,则不会从磁盘中检索它。因此,您在不必要地强制保留图像。

    对于 Core Data 本身,它也会根据需要从内存中删除属性。它会在访问时自动将它们拉回内存。 Core Data 还会缓存数据,因此您不会在内存中看到任何性能问题。

    【讨论】:

    • 图像都在 1mb-2mb 范围内,我已经把它们拉出来了。我的问题更多的是关于核心数据,以及是什么导致它在内存中保存一些东西而不是转储它并稍后从数据库中读取。该数组是因为我在分页滚动视图中有图像,并且我在两个方向上都预加载了 1 个图像。
    猜你喜欢
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多