UIImageView和UIImage:我如何调整其中的最佳性能?

时间:2009-05-09 22:52:33

标签: iphone cocoa-touch performance uikit

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

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

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

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

所以还有一个方法,这似乎很有趣: -initWithContentsOfFile:

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

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

3 个答案:

答案 0 :(得分:2)

只有基准测试才能确定。我倾向于认为UIImage图像缓存可能非常高效,因为它几乎在操作系统中的任何地方使用。也就是说,您显示的图像数量可能有所帮助。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我找到了一个关于imageNamed方法http://www.alexcurylo.com/blog/2009/01/13/imagenamed-is-evil/

的评论的链接