核心数据二进制数据类型加载不释放内存
我有Core Data
属性是Binary Data
类型。我们使用NSArchiver
归档自定义对象的NSArray
,然后将其保存在Core Data
中。核心数据二进制数据类型加载不释放内存
然后,当需要这些对象时,我们使用NSUnarchiver
将它变回NSArray
。
问题在于它耗尽了大量的内存,而且由于某种原因,我永远无法获得它。解除数据存档后,检查一些对象,然后将NSArray
或NSData
对象设置为零,则该内存永远不会恢复。对许多Core Data
实体执行相同的操作会导致永远不会返回的巨大内存使用量。
为什么会出现这种情况,或者我可以释放那些我明显不再使用的内存?
编辑:
我已经做了没有成功如下:
[managedObjectContext refreshObject:myObject mergeChanges:NO];
我得到了同样的问题。当我使用NSUnarchiver解压数据时,它会产生大量的临时内存,并且临时内存不会被释放。 @KrishnaCA说,我通过添加@ autoreleasepool解决了这个问题。你添加的代码不合适吗?如果你显示简单的代码,这有助于解决问题。
你在哪里添加它?围绕你使用'NSUnarchiver'的代码? –
从NSUnarchiver开始使用,到最终使用NSUnarchiver获得的数据。 –
只需添加其他信息。不是将NSArray归档为数据,而是使用coredata中可用的TRANSFORMABLE数据类型。对于例子http://stackoverflow.com/questions/8682324/insert-nsdictionary-into-coredata/25891673#25891673 –
你有没有尝试在'@ autoreleasepool'块中执行该任务? – KrishnaCA
@KrishnaCA是的,但这似乎没有帮助。 –