之前我曾问过similar question,但我认为已经改变为一个新问题。
我正在使用MagicalRecord的MR_importFromArray
方法导入大量数据。它在NSOperationQueue
的后台运行,maxConcurrentOperationCount
设置为1
。我从文件中批量导入500个。
我有一个gist包含我的所有代码,但基本上我是在file上循环,其中包含多达500个对象。然后我import them and save them使用MR_importFromArray
。
NSArray *array = [NSClassFromString(name) MR_importFromArray:cleanedResources inContext:moc];
[moc MR_saveToPersistentStoreAndWait];
[moc reset];
我有一切保存和正确关联。但是我的记忆力可以迅速增加到100多MB,并且通常会完全崩溃应用程序。我怎样才能确保导入过程没有使用太多内存,并在完成后将其释放。
每次导入后,我都会在reset
上调用NSManagedObjectContext
,但这似乎根本不会影响它。当我使用Instruments查看我的应用程序的内存/分配使用时,它表示MR_importFromArray
是所有内存负载来自的地方。 Leaks工具也找不到任何东西。
来自分配工具:
来自XCode(刚收到内存警告后):
我不确定为什么Allocations只说10MB是Live而XCode说100MB(我还在学习如何正确使用Allocations)。
我认为通过重置上下文,这将释放与该上下文相关的所有内存。
我有很多工作进入该操作队列,但就像我说的那样,一次只运行一个,所以我认为当它们完成时它们将完全从内存中删除。但我并没有在分配工具中看到这种类型的图表。
是什么导致内存堆积而不被释放,我该如何解决?
如果这将是有用的,那么来自分配工具的呼叫树(指向MR_importFromArray
呼叫的箭头:
call tree http://f.cl.ly/items/3R0b1k2s2u1E1F0o0f3N/Screen_Shot_2014-02-24_at_1_28_32_PM-10.png
要回答Tom的问题,我打开的文件只是JSON转换为NSDictionary,然后保存到文件中。当我在本地保存JSON文件时,它们大约是200 KB。同样,没有二进制属性只是字符串,数字,日期。