1

这是我一直想问的问题。当我在 Profiler 中运行 iOS 应用程序寻找分配问题时,我发现 NSManagedObject 在使用和显示后很长时间仍留在内存中,并且召回的 UIViewController 已被释放。当然当再次分配UIViewController时,数量并没有增加,说明没有泄漏,CoreData有某种对象重用。

如果我有一个名为“mobjc”的 MyManagedObject 类,那么在分析器中我可以看到越来越多的:

MyManagedObject_mobjc_

数量可能会有所不同,对于少量数据,例如 sqllite 中的 100 个对象,它会增长到该限制并保持在那里。

但似乎有时在应用程序生命周期中对象会被释放,所以我认为 CoreData 本身正在做某种内存优化。似乎没有保留整个对象,而是保留了它的“错误”(请原谅我的英语:-)),因为活动字节大小很小。即使是棘手的很多故障对象也会占用内存。

但在这一点上,我想要一些确认:

  • CoreData 真的在内存中管理和优化对象吗?
  • 我能做些什么来帮助我的应用程序保留尽可能少的对象吗?
  • 与上述有关,我真的需要处理这个问题吗?
  • 您是否有一些链接,可能来自 Apple,其中解释了这个特定主题?

也许是相关的,我用于测试的应用程序依赖于 ARC 和 iOS 5.1。

谢谢

4

1 回答 1

2

在这个 SO 主题Core Data Memory Management中,您可以找到您正在寻找的信息。

相反,这是指向 Apple 文档的Core Data Memory Managament的链接。

这里有一些提示。

首先,当你处理 Core Data 时,你处理的是一个对象图。为了减少内存消耗(修剪你的图),你可以reset在你正在使用的上下文上做一个或者把对象变成 fauts 传递NOrefreshObject:(NSManagedObject *)object mergeChanges:(BOOL)flag方法。如果您传递NO给该方法,您可能会丢失未保存的更改,因此请注意它。

此外,如果不需要,请不要使用撤消管理。它增加了内存使用(默认情况下,在 iOS 中,不创建撤消管理器)。

希望有帮助。

于 2012-06-27T10:05:29.727 回答