1

NSManagedObject 是否观察到内存警告并变成故障?我应该在记忆力紧张的情况下做这种事情吗?

是否有关于使用 Core Data 保留内存的指南?

4

2 回答 2

3

Core Data 旨在为您提供对内存友好的好工具,但其中大部分不是自动的。你还需要做一些工作。

一般准则有点难,因为不同的情况可能需要一些非常不同的优化。也就是说,一些注意事项:

  • 不特定于 Core Data,但如果您需要操作大量临时对象(即,如果从 Web 服务插入一堆数据),您可能需要使用 @autoreleasepool{...} 来确保这些对象不会活得比他们需要的更长。

  • 关于二进制属性,除非必须,否则不要加载它们。假设您有一个包含照片的人员实体。最好让“照片”与另一个属性建立关系——这意味着 Core Data 不必每次都加载该二进制数据,并且让您可以更好地控制何时将其带入内存。

  • 如果您不使用任何撤消功能,请确保您的上下文中有一个 nil 撤消管理器。

  • 您可以使用 refreshObject:mergeChanges: 如果您有一个对象想要恢复为故障 - 也许您只使用了很短的时间并且暂时不需要它。

  • 您可以将获取请求设置为不带回任何或所有 MOs 属性值,如果您只需要使用单个属性或类似的东西,这很有用。你也可以用这个来打自己的脚:如果你最终需要你没有拉下的属性之一,Core Data 必须回到持久存储......所以请确保你注意了。

这些只是其中的一小部分——“核心数据编程指南”还有其他一些,我认为这是必读的。总的来说,就像其他任何事情一样,您应该做最少的工作,然后衡量您的使用情况。看看事情进展如何,然后看看优化需要优化的部分。

玩得开心!

于 2012-12-08T22:37:11.180 回答
-1

您几乎可以假设核心数据将在后台进行所有内存管理优化。

如果您正在处理大量数据,尤其是在表视图中,请查看 NSFetchedResultsController ,它将有效地最小化内存占用和访问持久存储的次数。

于 2012-12-07T12:41:16.877 回答