1

首先:我为图像实现了一个相当复杂的滚动机制,它允许在一个滚动视图中滚动几十万(理论上)。这是通过在滚动时预加载小部分来完成的,同时重用所有 UIImageView。目前我所做的只是将新创建的 UIImage 对象分配给那些重用的 UIImageViews。

如果还可以通过将新的图像数据传递给它们来重用这些 UIImage 对象,那可能会更好。

现在的问题是,我目前正在使用 -imageNamed: 方法。文档说,它缓存了图像。

我在这种情况下使用 -imageNamed 看到的问题:随着图像滚动超出预加载范围,不再需要它。如果它在用户滚动、滚动和滚动时尝试缓存数千张图像,那就太糟糕了。如果我能找到一种方法将新图像数据填充到 UIImage 对象中以重新使用它,那么缓存的旧图像会发生什么?

所以剩下一种方法,看起来很有趣:-initWithContentsOfFile:

这不会缓存图像。而且它不使用-autorelease,这在这种情况下很好。

您认为在这种情况下使用 -initWithContentsOfFile: 会更好吗?

4

3 回答 3

2

只有基准可以肯定地告诉你。我倾向于认为UIImage图像缓存可能非常有效,因为它在操作系统中几乎无处不在。也就是说,根据您显示的图像数量,您的方法可能会有所帮助。

于 2009-05-09T23:28:26.357 回答
0

我会说是的。您有太多图像无法将所有图像都保存在缓存中,因此您无法使用 -imageNamed:。如果您的图像没有多次显示,则不会降低性能。

于 2011-08-22T14:10:48.563 回答
0

我找到了一个关于此的链接,其中对 imageNamed 方法的评论http://www.alexcurylo.com/blog/2009/01/13/imagenamed-is-evil/

于 2012-02-16T13:16:54.620 回答