我的数据核心内存有问题。在视图控制器中,我从NSManagedObject加载图像(数据),然后显示它,然后转到下一页加载另一个图像,依此类推。问题是我不能释放数据,在分配工具保存在CFDATA(存储)中。以下是代码的一部分:
ComicImage *cimg = [page getImageData];
NSData *data=cimg.imageData ;ComicImage为NSManagedObject,则getImageData返回包含要显示的图像的ComicImage。
释放数据会删除core-data中的图像,并且我无法再次加载它(崩溃)。我尝试过refreshObject:mergeChanges,但没有结果;上下文重置会导致应用程序崩溃。有什么想法吗?谢谢。
发布于 2011-04-23 21:30:18
如果在托管对象的属性中使用UIImage/NSImage来保存图像,则图像的内存管理将不在您的控制范围之内,因为只要托管对象在内存中处于活动状态,图像类就会将图像保留在内存中。
处理大图像的首选方法是将它们存储在外部文件中,并在Core Data中记录该文件的路径。这样,您就可以根据需要加载和卸载图像。
发布于 2012-01-01 23:00:08
我遇到了类似的问题,并设法解决了它。
每当我在NSManagedObjectContext上执行CFData操作时,分配工具都会显示‘save (store)’持久存储在内存中,即使在释放NSManagedObjects之后也是如此。加载其他存储时,“CFData( NSManagedObjects )”的大小会增大。
在我的NSManagedObjectContext上调用reset解决了这个问题,我在释放当前的NSManagedObjects之后执行此操作,并且在一次保存操作之后,“CFData(Store)”愉快地从内存中消失。
此外,您还可以在NSManagedObject中管理自己的属性。您可以覆盖didTurnIntoFault并在那里释放您的属性。willTurnIntoFault也是一种选择,不应该使用dealloc。
发布于 2012-01-01 23:15:03
你说你转到下一个“页面”去打开一个新的图像。如果您使用的是导航控制器,则在弹出之前,以前的页面将一直保留。我建议在这种情况下不要使用UINavigationController。
https://stackoverflow.com/questions/5763625
复制相似问题