CoreData和NSManagedObject内存状态

时间:2012-06-27 09:16:54

标签: objective-c core-data ios5

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

如果我有一个名为'mobjc'的MyManagedObject类,那么在profiler中我可以看到越来越多的:

  

MyManagedObject_mobjc _

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

但似乎有时在应用程序生命周期中对象被释放,所以我认为CoreData本身正在进行某种内存优化。 似乎不是整个对象被保留,而是它的“错误”(请原谅我的英文:-))因为实时字节大小。 即使很多故障对象也很难占据记忆。

但此时我想要一些确认:

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

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

感谢

1 个答案:

答案 0 :(得分:2)

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

相反,它是Core Data Memory Managament上Apple doc的链接。

这里有一些提示。

首先,当您处理Core Data时,您需要处理对象图。要减少内存消耗(修剪图形),您可以对正在使用的上下文执行reset或将对象转换为通过NOrefreshObject:(NSManagedObject *)object mergeChanges:(BOOL)flag方法的fauts 。如果您将NO传递给该方法,则可能会丢失未保存的更改,因此请注意它。

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

希望有所帮助。