2

我的模型来自核心数据。我的 bean 将图像作为 NSData 存储在模型中。

要显示我的图像,我需要做:

[UIImage imageWithData:bean.imageData] 

如果我到处都这样做可以吗?我的意思是,从视图 #1 我通过创建 [UIImage imageWithData:] 来显示图像,然后我继续视图 #2 我需要显示相同的图像,但我只在 2 个视图之间传递 bean,所以我重新创建 UIImage与 [UIImage imageWithData]。

我想知道如果我这样做是否需要太多的 CPU 或内存......我需要自己管理缓存吗?我认为这可能是 CoreData 很常见的用例,所以有一个通用的模式来处理这个吗?

4

2 回答 2

2

在回答你的问题时,imageWithData有点慢,所以,不,你可能不想到处这样做。您可能想要进行一些缓存以获得最佳性能(或者至少如果您可能会检索在与应用程序的给定会话期间重复的相同图像)。NSCache,就像 HalR 建议的那样,是一个很好的解决方案。

此外,如果图像很大,您可能根本不想将它们存储在 CoreData 中,而是将它们存储在 Documents 文件夹中,并且仅将文件名路径存储在 CoreData 中。令人惊讶的是,从数据库中检索图像然后使用 imageWithDatais 比使用imageWithContentsOfFile. 诚然,如果您进行缓存,您会较少受到这种性能影响,但是,如果您要检索大量单独的图像,差异是显而易见的。但是,对于缩略图,这不是什么问题。每个人都在不同的地方画这条线,但对我来说,如果每个图像都大于 100kb(或者如果我正在进行大量图像检索),我将使用 Documents 方法。

于 2013-09-04T03:52:12.377 回答
2

imageWithData 不会缓存您的图像(根据文档,唯一要缓存的 UIImage 方法是 imageNamed)

不过,这是一种缓存图像的算法

于 2013-09-04T03:27:15.887 回答