首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发布带核心数据的数据问题(CFDATA不断增长)

发布带核心数据的数据问题(CFDATA不断增长)
EN

Stack Overflow用户
提问于 2011-04-23 18:17:13
回答 3查看 964关注 0票数 0

我的数据核心内存有问题。在视图控制器中,我从NSManagedObject加载图像(数据),然后显示它,然后转到下一页加载另一个图像,依此类推。问题是我不能释放数据,在分配工具保存在CFDATA(存储)中。以下是代码的一部分:

代码语言:javascript
复制
        ComicImage *cimg = [page getImageData];


        NSData *data=cimg.imageData ;

ComicImage为NSManagedObject,则getImageData返回包含要显示的图像的ComicImage。

释放数据会删除core-data中的图像,并且我无法再次加载它(崩溃)。我尝试过refreshObject:mergeChanges,但没有结果;上下文重置会导致应用程序崩溃。有什么想法吗?谢谢。

EN

回答 3

Stack Overflow用户

发布于 2011-04-23 21:30:18

如果在托管对象的属性中使用UIImage/NSImage来保存图像,则图像的内存管理将不在您的控制范围之内,因为只要托管对象在内存中处于活动状态,图像类就会将图像保留在内存中。

处理大图像的首选方法是将它们存储在外部文件中,并在Core Data中记录该文件的路径。这样,您就可以根据需要加载和卸载图像。

票数 3
EN

Stack Overflow用户

发布于 2012-01-01 23:00:08

我遇到了类似的问题,并设法解决了它。

每当我在NSManagedObjectContext上执行CFData操作时,分配工具都会显示‘save (store)’持久存储在内存中,即使在释放NSManagedObjects之后也是如此。加载其他存储时,“CFData( NSManagedObjects )”的大小会增大。

在我的NSManagedObjectContext上调用reset解决了这个问题,我在释放当前的NSManagedObjects之后执行此操作,并且在一次保存操作之后,“CFData(Store)”愉快地从内存中消失。

此外,您还可以在NSManagedObject中管理自己的属性。您可以覆盖didTurnIntoFault并在那里释放您的属性。willTurnIntoFault也是一种选择,不应该使用dealloc

票数 2
EN

Stack Overflow用户

发布于 2012-01-01 23:15:03

你说你转到下一个“页面”去打开一个新的图像。如果您使用的是导航控制器,则在弹出之前,以前的页面将一直保留。我建议在这种情况下不要使用UINavigationController。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5763625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档