核心数据故障和内存警告

时间:2012-12-07 11:34:48

标签: objective-c cocoa core-data memory-management memory-warning

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

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

2 个答案:

答案 0 :(得分:3)

核心数据旨在为您提供良好的内存友好工具,但其中大部分都不是自动的。你还需要做一些工作。

一般指南有点困难,因为不同的情况可能需要一些非常不同的优化。那说了几句:

  • 不是特定于Core Data,但如果您需要操作大量临时对象(即,如果从Web服务插入一堆数据),您可能希望使用@autoreleasepool {...}来确保这些物体的寿命不会超过他们的需要。

  • 关于二进制属性,除非必须,否则不要加载它们。假设您有一个包含照片的人物实体。你最好让'photo'成为与另一个属性的关系 - 这意味着Core Data不必每次都加载那些二进制数据,并让你更好地控制何时将它带入内存。

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

  • 您可以使用refreshObject:mergeChanges:如果您有一个想要转回故障的对象 - 也许您只是在短时间内使用它,并且您暂时不会再需要它。< / p>

  • 您可以将获取请求设置为不带回任何或所有MO属性值,如果您只需要使用单个属性或类似属性,则非常有用。你也可以用这样的方式射击自己:如果你最终需要一个你没有拉下来的属性,Core Data必须回到持久存储......所以一定要注意。

这些仅仅是一些 - “核心数据编程指南”还有其他一些,我想说它需要阅读。总的来说,就像其他任何事情一样,你应该做最少量的工作然后测量你的用法。了解事情的进展情况,然后考虑优化需要优化的部件。

玩得开心!

答案 1 :(得分:-1)

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

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