首先:我为图像实现了一个相当复杂的滚动机制,允许在一个滚动视图中滚动几十万(理论上)。这是通过在滚动时预加载小部分,同时重新使用所有UIImageViews来完成的。目前,我所做的只是将新创建的UIImage对象分配给那些重用的UIImageViews。
如果可以通过将新的图像数据传递给它们来重新使用这些UIImage对象,那可能会更好。
现在的问题是,我目前正在使用-imageNamed:方法。文档说,它缓存图像。
我在这种情况下使用-imageNamed看到的问题: 当图像滚动到预加载范围之外时,不再需要它了。如果它在用户滚动和滚动并滚动时尝试缓存数千个图像将会很糟糕。 如果我找到一种方法将新的图像数据填充到UIImage对象中以便重新使用它,那么缓存的旧图像会发生什么?
所以还有一个方法,这似乎很有趣: -initWithContentsOfFile:
这不会缓存图像。并且它不使用-autorelease,这在这种情况下很好。
你认为在这种情况下使用-initWithContentsOfFile会更好吗?
答案 0 :(得分:2)
只有基准测试才能确定。我倾向于认为UIImage
图像缓存可能非常高效,因为它几乎在操作系统中的任何地方使用。也就是说,您显示的图像数量可能有所帮助。
答案 1 :(得分:0)
我会说YES。您有太多图像将所有图像保留在缓存中,因此您无法使用-imageNamed:。如果您的图像没有多次显示,则性能不会降低。
答案 2 :(得分:0)
我找到了一个关于imageNamed方法http://www.alexcurylo.com/blog/2009/01/13/imagenamed-is-evil/
的评论的链接